Python爬虫学习笔记 (14) [中级] 动态网页处理利器 selenium + 豆瓣网电影清单 (监控下拉&点击状态)

2021/4/10 1:25:08

本文主要是介绍Python爬虫学习笔记 (14) [中级] 动态网页处理利器 selenium + 豆瓣网电影清单 (监控下拉&点击状态),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

更新日期: 2021.04.09

本节学习内容

上一节练习了获取当当网图书清单,页面上没有判停的标志,使用 selenium不断的下拉滚动条继续加载,拉了 97次,终于到底了~

本节操练下使用 selenium 的另一种场景,即页面下方有个按键,比如 “点击下载更多”,不断的下拉滚动条,然后点击这个按键,直到这个按键不再出现了(拉到底了),或者,已经拉到了我预定的次数(获得了足够的信息),不需要继续加载了。

目录

  • 1. 采集豆瓣网电影清单
  • 2. 关于 selenium 的使用

1. 采集豆瓣网电影清单

代码和 print 语句有点唠叨,嘻嘻~~

运行完毕,得到以下输出,查了下 txt 文件,一共有700部电影~~:

  • 好像还有电影在下面,算了,已经拉了50次了,就这样吧~~
  • 豆瓣网2020年电影清单网页代码已经保存在 ‘douban_movie_list_2020.txt’ 文件中,收工~
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.common.exceptions import NoSuchElementException
from selenium.common import exceptions
import time
import random


# 初始化 driver
my_options = ChromeOptions()
my_options.add_experimental_option('excludeSwitches', ['enable-automation'])
my_options.add_argument('--disable-gpu') # 规避 bug
no_image = {"profile.managed_default_content_settings.images": 2}
my_options.add_experimental_option("prefs", no_image)
driver = webdriver.Chrome(options=my_options)


# 打开网页(豆瓣网2020年电影清单)
url = 'https://movie.douban.com/tag/#/?sort=U&range=0,10&tags=%E7%94%B5%E5%BD%B1,2020'
driver.get(url)
# 立即运行以下Javascript命令, 避免webdriver被网页上的JS代码检测为爬虫
driver.execute_script('Object.defineProperty(navigator,"webdriver",{get:() => false})')
time.sleep(random.uniform(1.2, 1.5))
# driver.execute_script('window.open("https://www.baidu.com")') # 也可以使用JS命令打开网页


# 最大化窗口,随机休眠
driver.maximize_window()
time.sleep(random.uniform(1.2, 1.5))


# 判停标准:页面拉到底了;或者已经下拉+点击50次,够啦
reach_bottom = False
click_times = 0
while (not reach_bottom) and (click_times < 50):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
    time.sleep(random.uniform(1.5, 2.1))
    try:
        driver.find_element_by_class_name('more').click()
        time.sleep(random.uniform(1.3, 1.6))
        click_times = click_times + 1
        if click_times == 50:
            print("好像还有电影在下面,算了,已经拉了50次了,就这样吧~~")
    except NoSuchElementException:
        print("Exception: " + str(NoSuchElementException))
        print("一共拉了 " + str(click_times) + " 次,没啦~~")
        reach_bottom = True
    except exceptions:
        print("Exception: " + str(exceptions))
        print("好像出了什么错误,我也不知道是什么...再拉拉试试吧...")


with open('douban_movie_list_2020.txt', 'a', encoding ="utf-8") as file:
    file.write(driver.page_source)

print("豆瓣网2020年电影清单网页代码已经保存在 'douban_movie_list_2020.txt' 文件中,收工~")

driver.quit()

2. 关于 selenium 的使用

  • 由于速度问题,只要可以使用 requests 库,就不考虑使用 selenium 。
  • 发现适合 selenium 的应用场景主要就是下拉滚动条和点击按键,分别在这两节种尝试了下。
  • selenium 的学习暂时告一段落,今后发现了新的应用场景,再回来加上~
  • 使用 selenium 的其他要点和 requests 一样,比如使用代理,cookies,设置 headers 等等,不再复述。


这篇关于Python爬虫学习笔记 (14) [中级] 动态网页处理利器 selenium + 豆瓣网电影清单 (监控下拉&点击状态)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程