js 爬虫抓取网页数据(Python网络爬虫动态网页详解(一)(1))

优采云 发布时间: 2021-11-18 04:09

  js 爬虫抓取网页数据(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。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线