python网页数据抓取(python爬取模拟浏览器本文网站数据更新后的数据分析方法)

优采云 发布时间: 2022-03-24 17:07

  python网页数据抓取(python爬取模拟浏览器本文网站数据更新后的数据分析方法)

  使用python爬取网站数据非常方便高效,但是BeautifSoup和requests的常用组合是爬取静态页面(即网页上显示的数据可以在html源码中找到) ,而不是网站通过js或者ajax异步加载),这种类型的网站数据比较容易爬取。但是网站上的一些数据是通过执行js代码来更新的,传统的方法不太适用。在这种情况下有几种方法:

  清除网页上的网络信息,更新页面,观察网页发出的请求。有的网站可以通过这种方式构造参数,从而简化爬虫。但适用范围不够广泛。

  使用模拟行为更新网页以获取更新后的数据。本文将在以下部分重点介绍此方法。

  一、准备

  模拟浏览器需要两个工具:

  1.selenium 可以通过 pip install selenium 直接安装。

  2.PhantomJS,这是一个无接口、可脚本化的WebKit浏览器引擎,在其官网搜索、下载,下载后无需安装,放在指定路径下,使用时只需要指定所在路径该文件位于。

  二、使用selenium模拟浏览器

  本文爬取网站的例子为::8099/ths-report/report!list.action?xmlname=46(最新发现网站打不开,2021年5月25日)

  学习示例时请不要爬太多页面,只需通过过程了解如何爬取即可。

  打开网站后,可以看到要爬取的数据是一个正则表,但是页面很多。

  

  在这个网站中,点击下一页的url是没有变化的,通过执行一段js代码来更新页面。因此,本文的思路是利用selenium模拟浏览器点击,点击“下一页”更新页面数据,获取更新后的页面数据。这是完整的代码:

  # -*- 编码:utf-8 -*-

  导入请求

  从 bs4 导入 BeautifulSoup

  导入json

  *敏*感*词*时间

  从硒导入网络驱动程序

  导入系统

  重新加载(系统)

  sys.setdefaultencoding("utf-8")

  curpath=sys.path[0]

  打印曲线

  定义获取数据(网址):

  # 使用下载的phantomjs,网上有人用firefox和chrome,但是我没有成功,用这个很方便

  驱动程序=webdriver.PhantomJS(executable_path="C:/phantomjs.exe")

  driver.set_page_load_timeout(30)

  时间.sleep(3)

  html=driver.get(url[0]) # 使用get方法请求url,因为是模拟浏览器,不需要headers信息

  对于范围内的页面(3):

  html=driver.page_source # 获取网页的html数据

  soup=BeautifulSoup(html,'lxml') #解析html,如果提示没有安装lxml,直接pip install lxml

  table=soup.find('table',class_="report-table")

  名称=[]

  对于 table.find_all('tr')[0].find_all('th') 中的 th:

  name.append(th.get_text()) # 获取表的字段名作为字典的key

  flag=0 #标志,当爬取字段数据为0,否则为1

  对于 table.find_all('tr') 中的 tr:

  # 第一行是表字段数据,所以跳过第一行

  如果标志==1:

  dic={}

  我=0

  对于 tr.find_all('td') 中的 td:

  dic[名称[i]]=td.get_text()

  我+=1

  jsonDump(dic,url[1])#保存数据

  标志=1

  # 使用find_element_by_link_text方法获取下一页的位置并点击。点击后页面会自动更新,只需要再次获取driver.page_source

  driver.find_element_by_link_text(u"下一页").click()

  def jsonDump(_json,name):

  """存储json数据"""

  使用 open(curpath+'/'+name+'.json','a') 作为输出文件:

  json.dump(_json,outfile,ensure_ascii=False)

  使用 open(curpath+'/'+name+'.json','a') 作为输出文件:

  outfile.write(',\n')

  如果 __name__ == '__main__':

  url=[':8099/ths-report/report!list.action?xmlname=46','yzc'] # yzc是文件名,这里输入中文会报错,你就不行了,所以你必须保存它并手动更改它的文件名……

  getData(url) # 调用函数

  本文通过driver.find_element_by_link_text方法获取下一页的位置。这是因为在这个网页中,这个标签没有唯一可识别的id,也没有class。如果是通过xpath定位,则首页和其他页面的xpath路径不完全相同,需要加一个if来判断。所以直接通过链接的text参数定位。click() 函数模拟浏览器中的点击。

  硒的功能非常强大。可以解决很多普通爬虫在爬虫中使用时无法解决的问题。可以模拟点击、鼠标移动、提交表单(登录邮箱、登录wifi等应用,网上有很多例子,我暂时还没试过),当你遇到一些标新立异的网站数据爬取很棘手,试试selenium+phantomjs。

  本文内容不用于商业目的。如涉及知识产权问题,请联系51Testing编辑(-8017),我们会第一时间处理

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线