Python爬取中国保险行业协会统计数据

本文是爬虫进阶内容,需要爬虫基础。

目标网页:http://www.iachina.cn/col/col41/index.html?uid=1508&pageNum=1

此网页是动态网页,神奇之处在于不用设置循环语句翻页爬取,而是直接修改post请求的data参数就可以爬取翻页内容。

本文起源于农经管2101班杨惠同学爬虫时遇到了问题,她进行积极的思考尝试,并搜索到了统计学人的如下教程:https://mp.weixin.qq.com/s/WDdKs7lXjbYBPFDPrLkm_A,这也是我第一次碰到这种类型的网页,遂记录下来。

本文参考教程的公众号为:

观察网页

  • 观察第一页,出现一个动态网页,查看response,好像有点奇怪
Python爬取中国保险行业协会统计数据
  • 翻第2页,第3页时,Network保持不变。
  • 翻到第4页的时候,出现一个dataproxy.jsp的网页,发现第4、5、6页的信息都在该网页上。
Python爬取中国保险行业协会统计数据
Python爬取中国保险行业协会统计数据
Python爬取中国保险行业协会统计数据

查看该网页的payload,startrecord=49,endrecord=96,perpage=16,endrecord-startrecord+1 = 48,说明开始数是49,结束数是96,一共有48条记录,每页记录是16个。

Python爬取中国保险行业协会统计数据
  • 翻到第7页的时候,又出现一个dataproxy.jsp的网页,发现第7页的信息都在该网页上。
Python爬取中国保险行业协会统计数据

查看该网页的payload,startrecord=97,endrecord=107,perpage=16,endrecord-startrecord+1 = 48,说明开始数是97,结束数是107,一共有11条记录,每页记录是16个。

Python爬取中国保险行业协会统计数据

说明翻页的时候,是startrecord和endrecord在变化,表示的是开始的记录数和结束的记录数,这不是页码参数,那我们能不能直接调整startrecord和endrecord,进行all in 呢?可以!目标网页共有107条记录,故我们可以设置startrecord=1,endrecord=107,至于perpage也可以设置大一点。

Python爬取中国保险行业协会统计数据

请求数据

import requests

headers = {
    'Accept''application/xml, text/xml, */*; q=0.01',
    'Accept-Language''zh-CN,zh;q=0.9',
    'Connection''keep-alive',
    'Content-Type''application/x-www-form-urlencoded; charset=UTF-8',
    'Origin''http://www.iachina.cn',
    'Referer''http://www.iachina.cn/col/col41/index.html?uid=1508&pageNum=3',
    'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
    'X-Requested-With''XMLHttpRequest',
}

params = {
    'startrecord''1',
    'endrecord''107',
    'perpage''107',   #设置大一点,一次性返回所有的文章
}

data = {
    'col''1',
    'appid''1',
    'webid''1',
    'path''/',
    'columnid''41',
    'sourceContentType''8',
    'unitid''1508',
    'webname''中国保险行业协会',
    'permissiontype''0',
}

r = requests.post(
    'http://www.iachina.cn/module/web/jpage/dataproxy.jsp',
    params=params,
    headers=headers,
    data=data,
    verify=False,
)
print(r.text)
Python爬取中国保险行业协会统计数据

解析数据

from bs4 import BeautifulSoup

soup = BeautifulSoup(r.text,'lxml')
items = []
a_list = soup.find_all('a')   # 获取所有的链接
for a in a_list:
 title = a.text           # 获取链接标题
 href = 'http://www.iachina.cn'+a.get('href')    # 获取链接网址
 item = [title,href]
 print(item)
 items.append(item)
Python爬取中国保险行业协会统计数据
Python爬取中国保险行业协会统计数据

保存数据

import pandas as pd

df = pd.DataFrame(items)
df.to_excel('保险业经营数据索引.xlsx')
Python爬取中国保险行业协会统计数据

原文始发于微信公众号(Python for Finance):Python爬取中国保险行业协会统计数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/281844.html

(0)
葫芦侠五楼的头像葫芦侠五楼

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!