excel抓取网页动态数据(动态网页爬虫技术一之API请求法安装selenium模块下载(组图))

优采云 发布时间: 2022-04-16 16:21

  excel抓取网页动态数据(动态网页爬虫技术一之API请求法安装selenium模块下载(组图))

  本节课我给大家讲解一个稍微复杂一点的爬虫,也就是动态网页的爬虫。

  动态网页技术简介

  动态网络爬虫技术的API请求方法

  动态网络爬虫技术二:模拟浏览器方法

  安装 selenium 模块下载

  谷歌浏览器驱动安装

  ChromeDriver以某宝藏松鼠店为例,抓取“坚果炒货”的商品名称、价格、销量和评论数

  课后作业

  关于作者

  动态网页技术简介

  所谓动态网页,是指相对于静态网页的一种网页编程技术。对于静态网页,随着html代码的生成,页面的内容和显示效果基本不会改变——除非你修改了页面代码。动态网页并非如此。虽然页面代码没有改变,但是显示的内容会随着时间、环境或数据库操作的结果而改变。

  值得强调的是,动态网页不应与页面内容是否动态相混淆。这里所说的动态网页与网页上的各种*敏*感*词*、滚动字幕等视觉动态效果没有直接关系。动态网页也可以是纯文本内容或收录各种*敏*感*词*内容。这些只是特定于网页。内容的呈现形式,无论网页是否具有动态效果,只要是通过动态网站技术生成的,都可以称为动态网页。(说明来源:百度百科-《动态网页》,如链接失效请访问:%E5%8A%A8%E6%80%81%E7%BD%91%E9%A1%B5/6327050?fr=阿拉丁)

  

  互联网每天都在蓬勃发展,数以万计的网络平台雨后春笋般涌现。不同平台针对不同用户的权限和偏好推出不同的个性化内容。看来,传统的静态网页早已无法满足社会的需求。于是,动态网页技术应运而生。当然,在对网页加载速度要求越来越高的情况下,异步加载成为了很多大型网站的首选。比如各大电商平台、知识型网站、社交平台等,都广泛采用了异步加载的动态技术。简单来说就是加载一些根据时间和请求而变化的内容,比如某宝的商品价格、评论等,比如某阀门的热门影评,新闻的视频等,通过先加载网页的整体框架,再加载。呈现动态内容。

  对于这种动态页面,如果我们使用上面提到的静态网页爬虫的方法来爬取,可能不会得到任何结果,因为大部分异步加载的内容都位于请求该内容的一段JS代码中。在一定的触发操作下,这些JS代码开始工作,从数据库中提取相应的数据,放到网页框架中的相应位置,最终拼接成一个我们可以看到的完整页面。

  动态网络爬虫技术的API请求方法

  看似复杂的操作,看似给我们的爬虫带来了不少麻烦,但其实也可能给我们带来很大的方便。我们只需要找到JS请求的API,按照一定的要求发送带有有效参数的请求,就可以得到最干净的数据,而不是像以前那样从嵌套的HTML代码中慢慢解析出我们想要的HTML代码. 所需的数据。

  这里我们以上面提到的豆瓣电影(如果链接失效,请访问:#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0)为例进行制作分析,提取豆瓣前100名电影的名称和评分及其地址。

  

  这是按人气排序的近期热门电影的截图。每个月都会发布不同的新电影。每部电影每天都会以口碑效应呈现不同的人气排名。如果这个页面是静态网页,那么豆瓣程序员每天上网修改这个页面是不是很辛苦。所以,我们可以大胆猜测这是一个动态页面。但猜测是不够的,我们必须证明它。这里我们将使用第二讲中提到的谷歌开发者工具。按F12或在网页空白处右键选择Inspect(N),或按键盘上的组合键Ctrl+Shift+I来召唤我们的神器。如下所示:

  

  今天我们不再使用左上角的鼠标按钮,而是使用红色框中的Network,显示了网页加载的所有文件,如下图所示:

  

  如果下面没有结果,您需要在打开 Google Developer Tools 的情况下刷新页面。

  

  如上图所示,我们可以通过点击上方小红框内的“XHR”按钮来过滤这个网页中异步加载的内容。至于哪一个是我们想要的,这是一个问题。看左边的地址,我们好像看不出什么端倪,我们来一一看看吧。. . 经过枚举,我们发现第三个就是我们想要的内容,其内容如下:

  

  我们可以看到这个链接中收录的内容是以 JSON 格式显示的。这时候我们就有了一个大概的思路,就是用requests模块下载这个链接的内容,然后用python的json模块下载内容。解析。

  但是,这似乎是一页,并且只有 20 部电影要数,而我们要的是前 100 部电影,如何做到这一点?

  没办法,毕竟是动态网页,内容可以根据请求改变,而且这里也没有登录操作,打开网页就可以看到,那我们可以换个网址来获取到下一页甚至下一页 页面的内容?当然可以,不然我就写不出来了!

  让我们仔细看看这个 URL 中传递的参数:

  

  至此,我们可能不知道这五个参数是干什么用的,但是我们可以找到规律,所以现在回到原来的网页,点击页面底部的“加载更多”,然后返回给开发者工具,哇,多了一个网址,就是刚才说的那个,内容也只要:

  

  此 URL 还传递五个参数:

  

  唯一的区别是名为“page_start”的关键字的值发生了变化。简单地把它翻译成页面的起点。看上面的“page_limit”,大概就是页数限制的意思。看右边的响应内容,这个页面传递了20个条目,也就是说“page_limit”是一个页面的条目数限制,也就是20,这个数据不变,而“page_start”是本页开头的条目号,那么我们要获取下面的内容,改“page_start”不就够了吗?是的。

  老规矩,先写个代码

  

  注1:因为一个页面有20条数据,我们需要爬取100条,而page_start的起始数据是0,所以这里只需要使用一个i,从0到4循环5次,相乘每次增加 20。你可以很容易地设置 page_start 的值,因为下面的 URL 是字符串类型。乘法运算后,我们使用 str() 方法将类型转换为 str 类型,方便后续调用。

  注2:这里我们只需要在每次循环的时候改变page_start的值,所以最后修改这个值;

  注3:返回的内容通过decode()方法解码,变成字符串类型。根据我们之前的分析,得出这是一个JSON格式的字符串。因此,我们使用 Python 内置的标准库 json 进行处理。解析,标准库不需要用pip工具安装。json模块主要有两个方法——json.loads()和json.dumps(),前者用于解码JSON数据,后者用于编码JSON数据。这里我们主要使用loads()方法将内容解析成字典格式的内容,存放在一个名为content_list的对象中,最后加上“['subjects']”来解析出我们想要的最简洁的。部分,这个根据具体内容而定,并不是所有的解析都应该这样写。例如这里,如下图:

  

  我们想要的最外面的内容有这样一个嵌套,嵌套的Key是“subjects”,这个Key的值是一个数组,这个数组就是我们想要的,所以加上了“['subjects']”。

  注 4:content_list 是一个数组对象,所以我们也做了一个循环来提取条带。

  注5:每条数据仍然是字典类型的对象,所以我们可以直接写对应的Key名称来获取想要的值,这里获取的电影名称;

  注6:同5,这里是电影的评分;

  注7:同5,这里是电影的豆瓣链接;

  最后,可以使用标准输入流写入txt文件,也可以使用xlwt模块写入EXCEL,也可以使用pymysql模块写入Mysql数据库。

  至此,这种寻找API并传递有效参数重放API的方法已经介绍给大家了。这是一种很常用的方法,可以在很多网站中使用,而且速度非常快,结果也是最简洁的。.

  动态网络爬虫技术二:模拟浏览器方法

  虽然我们上面提到的API请求方式好用又快,但并不是所有的网站都会使用这种异步加载方式来实现网站,还有一些网站会采取反爬措施爬虫,比如常见的验证码。虽然验证码主要是用来防止CSRF***的,但也有网站用来对付爬虫的,比如某宝。这时候我们要介绍另一个神器,Python的Selenium模块。

  Selenium 是用于 Web 应用程序测试的工具。Selenium 测试直接在浏览器中运行,就像真正的用户一样。支持的浏览器包括 IE (7, 8, 9, 10, 11), Mozilla Firefox, Safari, Google Chrome, Opera等。该工具的主要功能包括: 测试与浏览器的兼容性 - 测试看看你的应用是否(解释来自:百度百科-“Selenium”,如果链接失效请点击)

  简单来说,Selenium 是一个主要用于自动化测试的工具。它可以运行在各种带有浏览器驱动程序的浏览器中,并根据代码自动模拟人类操作来获取或控制网页元素。当然,Selenium 不是 Python 的产品,而是一个独立的项目,Python 提供了对 Selenium 的支持。(您可以自行访问 Selenium 的主页,如果链接无效,请点击)

  安装硒模块

  要使用Selenium这样的第三方工具,我们首先要安装它,这里还是使用pip工具。以管理员权限运行命令行,输入pip install selenium,稍等片刻即可完成安装,如果觉得官方pypi镜像网速慢,可以使用国内豆瓣镜像源,pip install selenium -i ,加上这个 -i 参数和豆瓣pypi镜像的地址就够了。如果要默认使用豆瓣镜像源,请自行百度修改方法。

  下载谷歌浏览器驱动

  安装成功后,我们需要安装下一个必要的东西,浏览器驱动程序。前面提到,selenium 需要配合浏览器驱动运行,所以我们以安装 Google Chrome Driver 为例。

  首先,我们需要查看我们的谷歌浏览器版本,可以在谷歌的“帮助”中查看。具体方法是打开Chrome,点击右上角的三个点状按钮,然后在弹出的菜单中依次选择Help。(E)->关于谷歌浏览器(G)如下图:

  

  笔者的浏览器更新到最新版本63,老版本的操作方法大致相同。

  点击信息后,我们可以看到当前的Chrome版本,下图为示例:

  

  Chrome在不断的升级,所以相应的驱动也要不断的更新和适配Chrome的版本。这里我们需要找到对应的ChromeDriver版本映射,推荐一个持续更新的CSDN博客(如果链接失效请点击:),根据版本映射表,下载对应版本的ChromeDriver,下载地址1()(如果链接失效,请访问:),下载地址2()(如果链接失效,请访问:)。

  安装 ChromeDriver

  这里需要配置环境变量。正如第一讲中提到的,为“路径”添加一行值。

  首先,我们需要找到 Chrome 的安装位置。最简单的方法是在桌面上找到谷歌浏览器的快捷方式,右键单击并选择“打开文件的位置”将其打开。比如我这里打开的路径是C:\Program Files(x86)\Google\Chrome\Application,那我就把这个路径加到Path里面。然后,我们需要把下载的ChromeDriver解压到exe程序中,将单独的exe程序复制到刚才的路径下,如下图:

  

  至此,ChromeDriver 已经完成安装。我们可以在命令行输入命令python进入python交互环境进行测试,如下图所示:

  

  如果你的谷歌浏览器自动打开并跳转到百度首页,那么恭喜~

  以某宝的松鼠店为例,抓取“坚果炒货”的品名、价格、销量和评论数

  此页面的 URL 是:#TmshopSrchNav

  老规矩,先放一段代码:

  

  注1:实例化一个webdriver的Chrome对象,命名为driver,会自动打开一个Chrome窗口。

  注2:调用驱动程序的maximize_window()方法。直接翻译是最大化窗口。

  注3:get方式调用驱动的get()方法请求URL。

  注4:这是开头的重点。Webdriver主要有八种查找元素的方式。这一行以class_name的形式搜索,注意这里的元素的复数。此方法用于查找页面上所有符合条件的元素。如果没有 s 方法,则只能找到第一个符合条件的元素。此行是使用 Google Developer Tools 左上角的小箭头工具来查看元素并找到所有产品项。其中一项范围如下所示。显示:

  

  注5:同注4,但是这里是css_selector,即css选择器是用来搜索的,因为这里的类名“item-name J_TGoldData”是复合结构,find_element_by_class_name()方法不支持复合结构的搜索。所以只能这样使用css_selector。

  注6:同注4,此处为单数,即在商品项范围内检索一次。

  注 7:同注 6。

  注 8:与注 4 相同,但这里是通过 xpath 搜索。

  XPath 代表 XML 路径语言,它是一种用于定位 XML(标准通用标记语言的子集)文档部分的语言。XPath 基于 XML 树结构,有不同类型的节点,包括元素节点、属性节点和文本节点,提供在数据结构树中查找节点的能力。XPath 的初衷是将其用作 XPointer 和 XSLT 之间的通用语法模型。但是 XPath 作为一种小型查询语言很快被开发人员采用。(解释来自:百度百科-《XPath》,如果链接失效请访问:)

  获取元素xpath的方法有多种,最简单的一种是在Google Developer Tools面板上选择要查找的元素,右键选择Copy -> Copy XPath,如下图所示:

  

  当然,这种方法可能存在缺陷,即获取的XPath可能过于繁琐,或者获取的XPath可能无法正确找到对应的元素,需要根据XPath语法手动修改。

  注意9:最后记得关闭实例化的对象,程序打开的浏览器也会关闭。

  这个例子的最终结果如下:

  

  您仍然可以自由选择数据存储方式。

  这里需要注意的是,使用 selenium 进行数据爬取可能比之前的 API 请求方式慢很多。打开到对应的窗口后,窗口可能会长时间没有动作,但这不一定是错误或者是程序卡住的表现,也可能是程序在疯狂搜索网页元素. 在此过程中,如果您不确定是否有错误,请不要进行其他操作,以免有时导致元素失去焦点,导致莫名其妙的错误。

  当然,硒的作用远不止这些。它几乎可以模拟人们在网页上可以做的任何行为,包括点击、输入等行为。这个比较适合一些网站填写验证码的你可以自己发现更多有趣的内容。本次讲座写在这里。感谢大家的耐心阅读。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线