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

优采云 发布时间: 2022-03-26 03:18

  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.浏览器的选择:在编写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。

  转载于:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线