js 爬虫抓取网页数据(Python网络爬虫动态网页详解(一)(1))
优采云 发布时间: 2022-03-26 03:18js 爬虫抓取网页数据(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.浏览器的选择:在编写Python网络爬虫时,主要使用Selenium的Webdriver。Selenium.Webdriver 不能支持所有的浏览器,也没有必要支持所有的浏览器。
Webdriver 支持列表:
5.安装 PhantomJS:
下载解压后,放到一个带有python的文件夹中:
windows下的PhantomJS环境配置好后,测试成功:
6.Selenium&PhantomJS 抓取数据:
(1)网站获取返回的数据
(2)定位“有效数据”的位置
(3)从定位中获取“有效数据”
7.以百度搜索为例,用百度搜索“python selenium”,保存搜索结果第一页的标题和链接:
(1)获取搜索结果:直接用Selenium&PhantomJS打开百度首页,然后模拟搜索关键字
(2)定位form frame或者“有效数据”位置可以通过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。
转载于: