欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python 抓取动态网页表格信息

程序员文章站 2022-03-26 20:04:19
PS:不管你是零基础还是有基础都可以获取到自己相对应的学习礼包!包括Python软件工具和2020最新入门到实战教程。加群695185429即可免费获取。 五一假期,研究了下Python抓取动态网页信息的相关操作,结合封面的参考书、网上教程编写出可以满足需求的代码。由于初涉python,过程中曲折很 ......

 

Python 抓取动态网页表格信息

 

 ps:不管你是零基础还是有基础都可以获取到自己相对应的学习礼包!包括python软件工具和2020最新入门到实战教程。加群695185429即可免费获取。

五一假期,研究了下python抓取动态网页信息的相关操作,结合封面的参考书、网上教程编写出可以满足需求的代码。由于初涉python,过程中曲折很多,为了避免以后遇到问题找不到相关的信息创建本文。

准备工具:

  1. python 3.8
  2. google chrome浏览器
  3. googledriver

测试网站:

1.集思录(https://www.jisilu.cn/data/cbnew/#cb)

测试前准备:

1.配置python运行的环境变量,参照链接(https://www.runoob.com/python3/python3-install.html)

 

*本次测试主要采取两种方式抓取动态网页数据,一是requests及json分析的方式;一是selenium的方式。requests方式速度快,但有一些元素的链接信息抓取不到;selenium方式通过模拟打开浏览器的方式进行数据的抓取,由于要打开浏览器因此速度相对较慢,但是可抓取的信息比较全面。

 

主要抓取的内容如下:(网站中的一些可转债数据)

 

Python 抓取动态网页表格信息

 

requests 方式抓取网站信息:

python需要安装的相关脚本:requests

安装方式:管理员身份运行cmd;输入 pip install requests 命令,安装成功后会有提醒。如果一次不能安装成功就多安装几次

(前提相关的端口没有封闭)。如果pip版本不是最新的,会提醒更新pip的版本,pip的环境变量也要设置,设置方式参照python的设置方式。

 

requests抓取代码如下:

import requests
import json
url='https://www.jisilu.cn/data/cbnew/cb_list/?___jsl=lst___'
return_data = requests.get(url,verify = false)
js=return_data.json()
for i in js['rows']:
    print(i['id']+" "+i['cell']['bond_nm']+" "+i['cell']['price'])

 

最终结果如下:

Python 抓取动态网页表格信息

 

注意两个要点:

找到正确的url:chrome打开集思录网站(https://www.jisilu.cn/data/cbnew/#cb)。点击f12键,弹出的开发工具窗口中选network,然后选xhr,点f5键刷新。在name的那一栏里逐个点击,找到所需的xhr。通过preview可发现“?__jsl=lst”对应的xhr就是我们要寻找的,在headers里可以查到对应的url。

Python 抓取动态网页表格信息

 

json将requests的数据格式进行转化,方便数据查找。通过json格式转化之后,requestes的数据格式与preview的格式一致。如果要定位到“国轩转债”那栏数据,则使用代码js['rows']['cell']['bond_nm']*selenium抓取网页数据:

Python 抓取动态网页表格信息

 

python 需安装的脚本:selenium(安装方式参照requests安装)

配置与浏览器相对应的webdriver。以chrome为例,下载与chrome版本对应(在地址栏输入chrome://version后回车查看chrome的版本)的driver。放在chrome安装的文件夹下,并设置环境变量。

 

selenium抓取代码如下:

from selenium import webdriver
import time
driver=webdriver.chrome()
url1='https://www.jisilu.cn/data/cbnew/#cb'
bes=driver.get(url1)
time.sleep(5)  #增加延时命令,等待元素加载
driver.find_element_by_tag_name("tr").click()  #增加延时,等待元素加载
table_tr_list=driver.find_element_by_xpath("//*[@id='flex_cb']").find_elements_by_tag_name("tr") #后面一个element改成elements
for tr in table_tr_list:
    if len(tr.get_attribute('id'))>0:
        print(tr.find_element_by_xpath("//*[@id=%d]/td[1]/a"%(int(tr.get_attribute('id')))).text+" "+tr.find_element_by_xpath("//*[@id=%d]/td[2]"%(int(tr.get_attribute('id')))).text)
driver.quit()

 

 

运行结果如下:

Python 抓取动态网页表格信息

 

 

注意三个要点:

1、要加上延时命令( time.sleep(5) ),否则可能出现寻找不到元素的报错(nosuchelementexception异常)

 

2、利用find_element_by_xpath时,可以在网页开发器中右击copy xpath,确认该元素的路径。

 

Python 抓取动态网页表格信息

 

 

3、传送id时,将字符转为数值,并注意清除空字符

抓取的数据也可通过python 保存到excel里。