python爬虫基础(11:动态网页之使用selenium)

为什么要用selenium?

前面我们介绍了通过分析 Ajax 请求获取数据,但有时 Ajax 请求的数据被加密了,还有并不是所有的动态网页都是使用 Ajax 的,当我们没有招应付动态页面的时候,就要请出大杀器——selenium, selenium不用去考虑 js 是怎样生成新数据的,而真正实现多见即所得:通过模拟下拉刷新后,js 就自动生成了新的网页源码,在浏览器中看到的页面是什么样,得到的源码就是什么样

之前做滑块验证https://blog.csdn.net/Jeeson_Z/article/details/82047685)的之后就用过它,这里依旧直接粘贴用法

selenium介绍:https://cuiqingcai.com/5630.html

记住:selenium虽然很好使,但效率很低,所以我们能不用则不用

案例依然选用上篇的 豆瓣电影剧情片排行榜

https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action=

这次我们假装它的 Ajax 加密或者不是使用 Ajax 得到新数据

我们先用requests模块直接获取

import requests


# 要访问的url
url = 'https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action='
# get()访问该动态网页
rsp = requests.get(url)
# text属性得到源码
html = rsp.text
# 将源码写入到能用浏览器直接打开的html文件
with open('dianying.html','w',encoding='utf-8') as f:
    f.write(html)

用浏览器打开得到的源码生成的 'dianying.html' 结果如下:

并不能获取到 js 动态生成的电影数据,提取更无从谈起

现在使用selenium模拟下拉刷新来获取

from selenium import webdriver
from time import sleep


# 要访问的url
url = 'https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action='
# 实例化一个浏览器对象
browser = webdriver.Chrome()
# 访问url
browser.get(url)
# 等待数据加载
sleep(3)
# 将滚动条移动到页面的底部的语句
js = "var q=document.documentElement.scrollTop=100000"
# 共580部电影,每次刷新20个,共刷新29次
for i in range(29):
    # 执行下拉操作
    browser.execute_script(js)
    # 等待数据加载
    sleep(3)
# 得到整个大页面的源码
html = browser.page_source
# 将源码写入到能用浏览器直接打开的html文件
with open('dianying.html','w',encoding='utf-8') as f:
    f.write(html)

用浏览器打开得到的源码生成的 'dianying.html' 结果如下:

这样得到的就是所有的电影信息了,这个过程是我们在模拟一个人在用浏览器,根本不关心这些新的电影数据是怎么来的

下载既然已经得到了包含所有电影信息的源码,提取就不在话下了

猜你喜欢

转载自blog.csdn.net/Jeeson_Z/article/details/82055512