python爬虫大作业

项目场景:

爬取湖南省政府官网,政务要闻栏目最近一个月的新闻,找出与教育、环保相关新闻分别保存在不同文本文件中。

文件格式要求:

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()

  • 你可能感兴趣的:(python爬虫,python,爬虫,开发语言)