爬取湖南省政府官网,政务要闻栏目最近一个月的新闻,找出与教育、环保相关新闻分别保存在不同文本文件中。
文件格式要求:
1. 文件名分别为:湖南省政务要闻教育版.txt,湖南省政务要闻环保版.txt
2. 每篇新闻需要保存:标题,发布时间,关键词(可选),内容
爬虫是关键词的搜索不行以及对于爬虫爬出数据的完整性
关于文章搜索关键词方面不能确定良好的方案
没想出很好的办法
import requests
import re
import json
from bs4 import BeautifulSoup
obj=re.compile(r'(?P',re.S)
obj2=re.compile(r'.*?(?P.*?)',re.S)
jiaoyu=['教育','教学','教师','学校','学生','文化','艺术']
huanbao=['山水','环保','绿色','禁渔','碳达峰','防治污染','污染','绿水','青山']
def get_domain_list_url():
domainlist=["http://www.hunan.gov.cn/hnszf/hnyw/zwdt/szdt_sjpx.html"]
for i in range(20):
domainlistsub="http://www.hunan.gov.cn/hnszf/hnyw/zwdt/szdt_sjpx_"+str(i)+".html"
domainlist.append(domainlistsub)
return domainlist
#返回每个主网页的网址列表(列表形式)
def get_domain_url_content(url):
r=requests.get(url)
r.encoding="utf-8"
soup=BeautifulSoup(r.text,features="html.parser")
domain_ydm=str(soup)
r.close()
return domain_ydm
#从单一网址获得网页源代码(str形式)
def get_sub_url(domain_ydm):
sub_url_title_list=[]
result=obj.finditer(domain_ydm)
for it in result:
suburl="http://www.hunan.gov.cn/"+it.group("sub_id")
#sub_url_list.append(suburl)#子页网址填入列表
#title_list.append(it.group("title"))#标题填入
sub_url_title_list.append([suburl,it.group("title")])
return sub_url_title_list
#返回子网页网址以列表形式
def get_sub_url_content(url):
r=requests.get(url)
r.encoding="utf-8"
soup=BeautifulSoup(r.text,features="html.parser")
sub_ydm=str(soup)
r.close()
return sub_ydm
def get_pure(sub_ydm):
pattern=r'()|(
)|()|()|(
)|()|()|()|()'
result_sub=obj_sub.finditer(sub_ydm)
for it1 in result_sub:
ttt=it1.group("content")
pure=re.sub(pattern,"",it1.group("content"))
return pure
def get_huanbao_xh(sw_list):
xh1_list=[]
for i in range(len(sw_list)):
for k in range(len(sw_list[i])):
for j in huanbao:
if j in sw_list[i][k][1]:
xh1_list.append([i,k])
return xh1_list
#获得环保类的文章编号(在三维列表中编号)
def get_jiaoyu_xh(sw_list):
xh2_list=[]
for i in range(len(sw_list)):
for k in range(len(sw_list[i])):
for j in jiaoyu:
if j in sw_list[i][k][1]:
xh2_list.append([i,k])
return xh2_list
#获得教育类的文章编号(在三维列表中编号)
def write_hb_text(list):
with open("政府要闻环保版.csv", "w+", encoding="utf-8") as fw:
for row in list:
fw.write("".join(row))
return fw
#把环保文章写成csv文件
def write_jy_text(list):
with open("政府要闻教育版.csv", "w+", encoding="utf-8") as fw:
for row in list:
fw.write("".join(row))
return fw
#正则表达式获得所需内容
def main():
domainlist=get_domain_list_url()
all_list=[]
xh1_list=[]
xh2_list=[]
hb_url_list=[]
jy_url_list=[]
hb_text=[]
jy_text=[]
for domain in domainlist:
domain_ydm=get_domain_url_content(domain)
a=get_sub_url(domain_ydm)
all_list.append(a)
xh1_list=get_huanbao_xh(all_list)
xh2_list=get_jiaoyu_xh(all_list)
for i in xh1_list:
hb_url_list.append(all_list[i[0]][i[1]][0])
for j in xh2_list:
jy_url_list.append(all_list[j[0]][j[1]][0])
for hb_url in hb_url_list:
hb_ydm=get_sub_url_content(hb_url)
hb_result=get_pure(hb_ydm)
hb_text.append(hb_result)
hb_final=write_hb_text(hb_text)
for jy_url in jy_url_list:
jy_ydm=get_sub_url_content(jy_url)
jy_result=get_pure(jy_ydm)
jy_text.append(jy_result)
jy_final=write_jy_text(jy_text)
main()