“风声雨声读书声声声入耳,家事国事天下事事事关心”,我们应该养成看新闻的习惯。接下来我将以证监会要闻为例,展示如何运用Requests库+BeautifulSoup库获取证监会要闻的标题、网址和发布时间等信息,并运用Pandas库将信息存储下来。
网址:
http://www.csrc.gov.cn/pub/newsite/zjhxwfb/xwdd/
本文思路
一、分析网页是静态网页还是动态网页,本案例是静态网页
二、研究如何爬取一页的数据——以第一页为例
1、导入相关库
2、采用Request库请求数据
3、采用BeautifulSoup库解析数据
4、采用Pandas库存储数据
三、研究翻页规律,构建循环语句
第一步 分析网页
1、谷歌浏览器右键“检查”,点击“Network”,刷新页面。
2、最上面名为“xwdd/”的链接,与证监会要闻地址后缀一致,点击它
3、点击“Response”或者“Preview”,发现我们需要的数据的确在这里。
二、研究如何爬取一页的数据——以第一页为例
1 引入需要的第三方库
import requests
import pandas as pd
from bs4 import BeautifulSoup
2 使用requests库请求数据
我们查看“Headers”发现请求方法为get请求。
url='http://www.csrc.gov.cn/pub/newsite/zjhxwfb/xwdd/'
r=requests.get(url)
r.encoding=r.apparent_encoding
3 采用BeautifulSoup库解析数据
我们发现,所有证监会要闻信息存储在id='documentContainer'的‘div'标签下的,我们可采用BeautifulSoup提取相关信息。
items=[]#设置空列表存储数据
soup=BeautifulSoup(r.text,'html.parser')
li_list=soup.find('div',id='documentContainer').find_all('li')
for li in li_list:
title=li.find('a').text#获取要闻标题
href=li.find('a').get('href')[1:]#获取要闻链接后缀
child_url='http://www.csrc.gov.cn/pub/newsite/zjhxwfb/xwdd'+href#获取要闻链接
date=li.find('span').text#获取发布时间
item=[title,date,child_url]
items.append(item)
4 采用Pandas库将数据保存至本地
df= pd.DataFrame(items,columns=['标题','发布时间','链接'])df.to_csv('BS爬取证监会要闻第一页.csv')
三、通过循环,爬取所有页面的要闻信息
寻找页面翻页规律
第1页:
http://www.csrc.gov.cn/pub/newsite/zjhxwfb/xwdd/
第2页:
http://www.csrc.gov.cn/pub/newsite/zjhxwfb/xwdd/index_1.html
第3页:
http://www.csrc.gov.cn/pub/newsite/zjhxwfb/xwdd/index_2.html
第{i}页(i>=2):
http://www.csrc.gov.cn/pub/newsite/zjhxwfb/xwdd/index_{i-1}.html
最后一页(第50页)
http://www.csrc.gov.cn/pub/newsite/zjhxwfb/xwdd/index_49.html
设置循环语句
截至2021年10月1日,我们发现网站一共有50页,其中第1页和2-50页不太一样,我们可以这样设置循环语句:
for i in range(1,51):#2021年10月1日证监会要闻有50页
if i==1:
url='http://www.csrc.gov.cn/pub/newsite/zjhxwfb/xwdd/'
else:
url=f'http://www.csrc.gov.cn/pub/newsite/zjhxwfb/xwdd/index_{i-1}.html'
全套代码如下:
import requests
import pandas as pd
from bs4 import BeautifulSoup
items=[]
for i in range(1,51):#2021年10月1日证监会要闻有50页
if i==1:
url='http://www.csrc.gov.cn/pub/newsite/zjhxwfb/xwdd/'
else:
url=f'http://www.csrc.gov.cn/pub/newsite/zjhxwfb/xwdd/index_{i-1}.html'
r=requests.get(url)
r.encoding=r.apparent_encoding
soup=BeautifulSoup(r.text,'html.parser')
li_list=soup.find('div',id='documentContainer').find_all('li')
for li in li_list:
title=li.find('a').text
href=li.find('a').get('href')[1:]
child_url='http://www.csrc.gov.cn/pub/newsite/zjhxwfb/xwdd'+href
date=li.find('span').text
item=[title,date,child_url]
items.append(item)
df = pd.DataFrame(items,columns=['标题','发布日期','网页链接'])
df.to_csv('BS爬取证监会要闻.csv')
最后我们得到的csv文件如下图所示: