美文网首页Python学习资料整理初学者
python爬虫:使用Selenium模拟浏览器行为

python爬虫:使用Selenium模拟浏览器行为

作者: 9ba4bd5525b9 | 来源:发表于2019-04-17 16:17 被阅读34次

    分析

    他的代码比较简单,主要有以下的步骤:使用BeautifulSoup库,打开百度贴吧的首页地址,再解析得到id为new_list标签底下的img标签,最后将img标签的图片保存下来。

    前面提到过,有部分图片是动态加载的,那么首先我们得弄清楚,这部分图片是怎么动态加载的。在浏览器中打开百度贴吧的首页,可以明显的看到,在往下滚动滚动条的时候,当滚动到底部的时候,滚动条缩短了,并向上移动了一段距离。这个现象也正是有DOM元素动态的添加到了html文档的一个表现。动态加载数据无非就是ajax请求,而ajax本质上就是XMLHttpRequest请求(简称xhr)。在谷歌浏览器中,我们可以通过开发者工具的network面板来监测xhr请求。

    刚打开首页时的xhr请求,这里的请求都和要爬取的图片无关。

    滚动条向下第1次滚动到底部,这里请求的是第20-40条热门动态,包含要爬取图片。

    滚动条向下第2次滚动到底部,这里请求的是第40-60条热门动态,包含要爬取图片。并且返回的的has_more:false表明没有跟多数据了。

    滚动条向下第3次滚动到底部,再无xhr请求。

    解决方案

    根据上面的分析,我们已经明白,单纯使用BeautifulSoup进行爬虫的时候,只能爬取到1-20条热门动态里面的图片。为了爬取到完整的热门动态里面的图片,我们则需要模拟浏览器的滚动条滚动,让网页去触发xhr请求更多的热门动态。

    在python中,如果需要模拟浏览器的行为,可以使用selenium库。selenium库是一个自动化测试框架,可以用来模拟测试浏览器的各种行为,这里我们使用它来模拟浏览器打开百度贴吧的首页,并模拟滚动条向下滚动到底部的操作。

    安装

    pip install selenium

    下载浏览器驱动

    火狐浏览器驱动,其下载地址是:https://github.com/mozilla/geckodriver/releases

    谷歌浏览器驱动,其下载地址是:http://chromedriver.storage.googleapis.com/index.html?path=2.33/

    opera浏览器驱动,其下载地址是:https://github.com/operasoftware/operachromiumdriver/releases

    对照自己电脑安装的浏览器和对应的版本,分别从上面的地址下载驱动文件,也可以从我的github项目中统一下载以上几个驱动(地址:https://github.com/Sesshoumaru/attachments/tree/master/Selenium%20WebDriver)。下载解压后,将所在的目录添加系统的环境变量中。当然你也可以将下载下来的驱动放到python安装目录的lib目录中,因为它本身已经存在于环境变量(我就是这么干的)。

    使用python代码模拟浏览器行为

    要使用selenium先需要定义一个具体browser对象,这里就定义的时候就看你电脑安装的具体浏览器和安装的哪个浏览器的驱动。这里以火狐浏览器为例:

    再模拟打开贴吧首页:

    browser.get("https://tieba.baidu.com/index.html")

    再模拟滚动条滚动到底部

    最后再使用BeautifulSoup,解析图片标签:

    html = BeautifulSoup(browser.page_source,"lxml")

    imgs = html.select("#new_list li img")

    几个注意点

    必须安装浏览器和浏览器驱动,并且浏览器和浏览器驱动要配到

      即如果使用谷歌浏览器模拟网页行为,则需要下载谷歌浏览器驱动;

      如果使用火狐浏览器模拟网页行为,则需要下载火狐浏览器驱动

    浏览器驱动所在的目录要在环境变量中,或者定义浏览器browser的时候指定驱动的路径

    selenium更多用法

    查找元素

    .

    获取元素信息

    元素交互操作

    执行JavaScript

    相关文章

      网友评论

        本文标题:python爬虫:使用Selenium模拟浏览器行为

        本文链接:https://www.haomeiwen.com/subject/xrmnwqtx.html