js 爬虫抓取网页数据(Python网络爬虫动态网页详解(一)(1))
优采云 发布时间: 2021-11-18 04:09js 爬虫抓取网页数据(Python网络爬虫动态网页详解(一)(1))
1.动态网页指的是几种可能:
1) 需要用户交互,比如常见的登录操作;
2)网页是通过/AJAX动态生成的,如果html中有,则是JS生成
啊啊啊
;
3) 点击输入关键字查询,浏览器url地址不变
2.在网站中使用Python获取JavaScript返回的数据,目前有两种方法:
第一种方法:直接url法
(1) 仔细分析页面结构,检查js响应的动作;
(2)借助firfox的firebug分析js点击动作发送的请求url;
(3) 使用这个异步请求url作为scrapy的start_url或者yield请求再次获取。
方法二:借助硒
Selenium基于并结合其WebDriver来模拟用户的真实操作。它具有良好的Ajax处理能力,支持多种浏览器(Safari、IE、Firefox、Chrome),可以在多种操作系统上运行。Selenium 可以调用浏览器的API 接口,selenium 会打开一个浏览器,然后在新打开的浏览器中执行程序中模拟的动作。
如图:
3. 安装下面的 Selenium 模块:
4.浏览器选择:Selenium Webdriver主要在编写Python网络爬虫时使用。Selenium.Webdriver 不能支持所有浏览器,也没有必要支持所有浏览器。
Webdriver 支持列表:
5.安装 PhantomJS:
下载解压后,放入python文件夹中:
windows下PhantomJS环境配置好后,测试成功:
6.Selenium&PhantomJS 抓取数据:
(1)网站获取返回的数据
(2)定位“有效数据”的位置
(3)从定位中获取“有效数据”
7.以百度搜索为例,使用百度搜索“python selenium”,保存搜索结果第一页的标题和链接:
(1) 获取搜索结果:用Selenium&PhantomJS直接打开百度首页,然后模拟搜索关键词
(2) 定位表单框或“有效数据”位置,可以使用import导入bs4来完成,也可以使用Selenium自带的功能来完成:一共有8种F方法来定位“有效数据”数据”来自返回的数据:
可以看到文本框中有class、name、id属性,可以使用find_element_by_class_name、find_element_by_id、find_element_by_name来定位:
选择以下三种定位功能之一:
textElement=browser.find_element_by_class_name('s_ipt')
textElement=browser.find_element_by_id('kw')
textElement=browser.find_element_by_name('wd')
发送搜索关键字:
textElement.send_keys('python selenium')
找到提交按钮:
从图中可以看出,提交按钮有id和class属性,可以通过find_element_by_class_name和find_element_by_id来定位:
8. 获取有效数据的地方:首先定位搜索结果的标题和链接:查看搜索结果的源代码:
找到一个特殊属性:class="c-tools",搜索这个属性:
一共找到12个条目,第二个搜索结果的标题与搜索页面上的第二个搜索结果相同。可以确定所有搜索结果都收录 class="c-tools" 标签
您可以使用 find_element_by_class_name 来定位所有搜索结果:
9. 从位置获取有效数据:确定有效数据的位置后,如何从该位置过滤掉有效数据?
Selenium 有自己独特的方法:
元素.文本()
element.get_attribute(name)
需要的有效数据是data-tools属性的值:执行命令
遍历resultElements列表,可以得到所有搜索结果的title和url。