0


Python网络爬虫案例实战:动态网页爬取:selenium爬取动态网页

Python网络爬虫案例实战:动态网页爬取:selenium爬取动态网页

利用“审查元素”功能找到源地址十分容易,但是有些网站非常复杂。除此之外,有一些数据真实地址的URL 也十分冗长和复杂,有些网站为了规避这些爬取会对地址进行加密。
因此,在此介绍另一种方法,即使用浏览器渲染引擎,直接用浏览器在显示网页时解析HTML,应用CSS样式并执行JavaScript的语句。此方法在爬虫过程中会打开一个浏览器,加载该网页,自动操作浏览器浏览各个网页,顺便把数据抓下来。通俗地说,就是使用浏览器渲染方法,将爬取动态网页变成了爬取静态网页。
可以用 Python的 selenium库模拟浏览器完成爬取。selenium是一个用于 Web 应用程序测试的工具。selenium测试直接运行在浏览器中,浏览器自动按照脚本代码做出单击、输入、打开、验证等操作,就像真正的用户在操作一样。

4.4.1安装 selenium

selenium的安装非常简单,和其他的Python库一样,可以用pip安装,代码为:

pip install selenium 

selenium的脚本可以控制浏览器进行操作,可以实现多个浏览器的调用,包括 IE(7、8、9、10、11)、Firefox、Safari、Google Chrome、Opera等。
安装完成后打开终端,输入python回车,进入Python,如图4-21所示。
在这里插入图片描述
接着,在终端中输入from selenium import webdriver并回车。若未报错则成功,如图4-22所示;若失败则重新安装selenium模块。
在这里插入图片描述
若输入 web = webdriver.Firefox()并回车,则打开浏览器。正常情况下会打开一个这样的Firefox,如图4-23所示。
在这里插入图片描述

在图4-23中的地址栏带有黄色条纹,还有个小机器人图标。如果出现错误“selenium.common.exceptions.WebDriverException:Message:'geckodriver’executable needs to be in PATH.”,即证明没有安装驱动,这时只需要安装驱动即可。

Mac版 Firefox驱动的下载地址为:http://download.csdn.net/download/qq_ 34122135/10203884,下载完驱动,解压得到 geckodriver,然后把文件移到/usr/local/bin下面,并赋给x执行权限即可。安装完驱动,然后测试一下用Python 代码控制浏览器打开a百度首页。

from selenium import webdriver
wb = webdriver.Firefox()
wb.get("http://www.baidu.com")#打印网页源码print(wb.page_source)

执行程序得到如图4-24所示界面。可以看到,启动了一个带小机器人图标的Firefox,并且打开了百度首页,控制台也输出了百度首页的所有源码,如图4-25所示。
在这里插入图片描述
在这里插入图片描述
至此,基本环境就已经配置好了,接下来开始爬取表情包。

4.4.2爬取百度表情包

我们可以使用百度图片捜索功能来实现表情包爬虫。
首先,先打开百度图片,搜索“表情包”,如图4-26所示。
接下来只要分析一下网页结构,按规则过滤就可以得到图片链接了。
用Firefox自带的工具查看即可,在网页上右击弹出快捷菜单,选择“查看元素”命令就可以很清晰地看到文档结构了,如图4-27所示。
其中,对环境结构进行了配置:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此,环境已经配置好了,文档结构也分析完了,接下来编写代码。下面是下载图片的模块 download.py,代码为:

# -*- coding=utf-8 -*-from selenium import webdriver
from netutil import download
classImgSpider(object):# wd 搜索的关键字,maxPage最大下载的页数def__init__(self, wd="", maxPage =5):# 百度图片搜索的http请求
        self.url ="https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word="+wd
        # 打开火狐浏览器
        self.wb = webdriver.Firefox()# 设置最大下载你页数
        self.deep = maxPage
        self.start =1#     打开第一页deffirst(self):# 打开url获取第一页结果
        self.wb.get(self.url)# 解析网页
        self.parse()# 读取下一页
        self.onNext()#     递归读取下一页,直到条件不满足defonNext(self):# 当前页码加1
        self.start +=1# 解析网页
        self.parse()# 通过xpath方法匹配页码指示器
        element = self.wb.find_element_by_xpath("//div[@id='page']")for el in element.find_elements_by_xpath(".//span[@class='pc']"):# 获取页码str= el.text
            num =int(str)# 比较页码,不满足条件则关闭程序if num > self.deep:
                self.close()#     继续执行下一页操作if num == self.start:
                el.click()
                self.onNext()#      解析下载图片defparse(self):# 通过xpath匹配当前网页的所有图片的最上层节点
        imgs = self.wb.find_element_by_xpath('''//div[@id="wrapper"]''')
        i =0# 匹配所有的图片节点,遍历下载for img in imgs.find_elements_by_xpath(".//img"):
            i = i +1# 获取img标签的连接
            url = img.get_attribute("src")print(url)# 给下载模块下载图片
            download.downloadByHttp(url)#关闭爬虫defclose(self):
        self.wb.quit()
        exit()#开始抓取数据 关键字和最大页数
spider = ImgSpider("表情包",5)
spider.first()

至此,便完成了表情包的下载。
在这里插入图片描述

标签: python 爬虫 selenium

本文转载自: https://blog.csdn.net/andyyah/article/details/141123399
版权归原作者 andyyah晓波 所有, 如有侵权,请联系我们删除。

“Python网络爬虫案例实战:动态网页爬取:selenium爬取动态网页”的评论:

还没有评论