python爬虫大作业

项目场景:

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

文件格式要求:

1. 文件名分别为:湖南省政务要闻教育版.txt,湖南省政务要闻环保版.txt

2. 每篇新闻需要保存:标题,发布时间,关键词(可选),内容


问题描述

爬虫是关键词的搜索不行以及对于爬虫爬出数据的完整性


原因分析:

关于文章搜索关键词方面不能确定良好的方案


解决方案:

没想出很好的办法

import requests
import re
import json
from bs4 import BeautifulSoup

obj=re.compile(r'<li class="active"><div class="li-bg"></div><a href="/(?P<sub_id>.*?)'
               r'" target="_blank" title="(?P<title>.*?)'
               r'"><span>(?P<time>.*?)</span><em>',re.S)
obj2=re.compile(r'<li class="active"><div class="li-bg"></div><a href="/(?P<sub_id2>.*?)'
               r'" target="',re.S)
obj3=re.compile(r'<p>(?P<final>.*?)</p>',re.S)

obj_sub=re.compile(r'<div class="content" id="zoom">.*?<p>(?P<content>.*?)</div.*?<div class="nr_li">',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'(<p>)|(</p>)|(<strong>)|(</strong)|(<p style="text-align: justify;">)|(<br/>)|(<span style="font-family: 楷体, 楷体_GB2312;">)|(<span style="font-weight: bold;">)|(</span>)|(<p style="text-align: center;">)'
    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()    
    

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值