假期学习【八】首都之窗百姓信件爬虫(完整版)2020.2.6 Python

时间:2020.2.6

今天把昨天做到一半的首都之窗百姓信件爬取完成了。

源码如下:

  1 import requests
  2 import io
  3 from bs4 import BeautifulSoup
  4 #信1705-1 赵路仓
  5 kv = {‘user-agent‘: ‘Mozilla/5.0‘}
  6 id=‘AH20010700179‘
  7
  8 def read():
  9     f=open(‘E://list.txt‘,‘r‘)
 10     for line in f:
 11         id=f.readline().rstrip(‘\n‘)
 12         print(id)
 13         url1 = "http://www.beijing.gov.cn/hudong/hdjl/com.web.consult.consultDetail.flow?originalId=" + id  # 咨询
 14         url2 = "http://www.beijing.gov.cn/hudong/hdjl/com.web.suggest.suggesDetail.flow?originalId=" + id  # 建议
 15         url3 = "http://www.beijing.gov.cn/hudong/hdjl/com.web.complain.complainDetail.flow?originalId=" + id  # 投诉
 16         parser(url1)
 17         parser2(url2)
 18         parser3(url3)
 19     f.close()
 20
 21 def write(contents):
 22     f=open(‘E://result.txt‘,‘a+‘)
 23     f.write(contents)
 24     print(contents,‘写入成功!‘)
 25     f.close()
 26
 27 def parser(url):
 28     try:
 29         r = requests.get(url, headers=kv)
 30         print(r.status_code)
 31         demo = r.text
 32         soup = BeautifulSoup(demo, "html.parser")
 33         #print(soup.prettify())
 34         ‘‘‘print("标题:", soup.find("strong").get_text().lstrip().rstrip())
 35         print("来信人:",soup.find_all("div", {"class": "col-xs-10 col-lg-3 col-sm-3 col-md-4 text-muted"})[0].get_text().lstrip(‘来信人:‘).lstrip().rstrip())
 36         print("时间:",soup.find_all("div", {"class": "col-xs-5 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip(‘时间:‘))
 37         print("网友同问:", soup.find_all("div", {"class": "col-xs-4 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip().rstrip().lstrip("网友同问:").lstrip().rstrip())
 38         print("问题:", soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-2 text-muted mx-2"})[0].get_text().lstrip().rstrip())
 39         print("官方:", soup.find_all("div", {"class": "col-xs-9 col-sm-7 col-md-5 o-font4 my-2"})[0].get_text())
 40         print("回答时间:",soup.find_all("div", {"class": "col-xs-12 col-sm-3 col-md-3 my-2"})[0].get_text().lstrip(‘答复时间:‘))
 41         print("回答:", soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-4 text-muted my-3"})[0].get_text().lstrip().rstrip())‘‘‘
 42         if soup.find_all("div", {"class": "col-xs-4 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().find(
 43                 ‘网友同问‘) != -1:
 44             write("咨询"+"||")
 45         write(soup.find("strong").get_text().lstrip().rstrip()+"||")
 46         write(soup.find_all("div", {"class": "col-xs-10 col-lg-3 col-sm-3 col-md-4 text-muted"})[0].get_text().lstrip(‘来信人:‘).lstrip().rstrip()+"||")
 47         write(soup.find_all("div", {"class": "col-xs-5 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip(‘时间:‘)+"||")
 48         write(soup.find_all("div", {"class": "col-xs-4 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip().rstrip().lstrip("网友同问:").lstrip().rstrip()+"||")
 49         write(soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-2 text-muted mx-2"})[0].get_text().lstrip().rstrip()+"||")
 50         write(soup.find_all("div", {"class": "col-xs-9 col-sm-7 col-md-5 o-font4 my-2"})[0].get_text().lstrip().rstrip()+"||")
 51         write(soup.find_all("div", {"class": "col-xs-12 col-sm-3 col-md-3 my-2"})[0].get_text().lstrip(‘答复时间:‘)+"||")
 52         write(soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-4 text-muted my-3"})[0].get_text().lstrip().rstrip().replace(" ",""))
 53         write(soup.find_all("a", {"class": "dex_yes font12"})[0].get_text().lstrip().rstrip().replace(" ", "") + "||")
 54         write(soup.find_all("a", {"class": "dex_no font12"})[0].get_text().lstrip().rstrip().replace(" ", "") + "||")
 55         write(‘\r\n‘)
 56     except:
 57         print("咨询爬取失败!")
 58
 59 def parser2(url):
 60     try:
 61         r = requests.get(url, headers=kv)
 62         print(r.status_code)
 63         demo = r.text
 64         soup = BeautifulSoup(demo, "html.parser")
 65         #print(soup.prettify())
 66         ‘‘‘print("标题:", soup.find("strong").get_text().lstrip().rstrip())
 67         print("来信人:",soup.find_all("div", {"class": "col-xs-10 col-lg-3 col-sm-3 col-md-4 text-muted"})[0].get_text().lstrip(‘来信人:‘).lstrip().rstrip())
 68         print("时间:",soup.find_all("div", {"class": "col-xs-5 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip(‘时间:‘))
 69         print("网友同问:", soup.find_all("div", {"class": "col-xs-4 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip().rstrip().lstrip("网友同问:").lstrip().rstrip())
 70         print("问题:", soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-2 text-muted mx-2"})[0].get_text().lstrip().rstrip())
 71         print("官方:", soup.find_all("div", {"class": "col-xs-9 col-sm-7 col-md-5 o-font4 my-2"})[0].get_text())
 72         print("回答时间:",soup.find_all("div", {"class": "col-xs-12 col-sm-3 col-md-3 my-2"})[0].get_text().lstrip(‘答复时间:‘))
 73         print("回答:", soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-4 text-muted my-3"})[0].get_text().lstrip().rstrip())‘‘‘
 74         if soup.find_all("div", {"class": "col-xs-4 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().find(‘网友支持‘)!=-1:
 75             write("建议"+"||")
 76         write(soup.find("strong").get_text().lstrip().rstrip()+"||")
 77         write(soup.find_all("div", {"class": "col-xs-10 col-lg-3 col-sm-3 col-md-4 text-muted"})[0].get_text().lstrip(‘来信人:‘).lstrip().rstrip()+"||")
 78         write(soup.find_all("div", {"class": "col-xs-5 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip(‘时间:‘)+"||")
 79         write(soup.find_all("div", {"class": "col-xs-4 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip().rstrip().lstrip("网友支持:").lstrip().rstrip()+"||")
 80         write(soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-2 text-muted mx-2"})[0].get_text().lstrip().rstrip()+"||")
 81         write(soup.find_all("div", {"class": "col-xs-9 col-sm-7 col-md-5 o-font4 my-2"})[0].get_text().lstrip().rstrip()+"||")
 82         write(soup.find_all("div", {"class": "col-xs-12 col-sm-3 col-md-3 my-2"})[0].get_text().lstrip(‘答复时间:‘)+"||")
 83         write(soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-4 text-muted my-3"})[0].get_text().lstrip().rstrip().replace(" ",""))
 84         write(soup.find_all("a", {"class": "dex_yes font12"})[0].get_text().lstrip().rstrip().replace(" ", "") + "||")
 85         write(soup.find_all("a", {"class": "dex_no font12"})[0].get_text().lstrip().rstrip().replace(" ", "") + "||")
 86         write(‘\r\n‘)
 87     except:
 88         print("建议爬取失败!")
 89
 90 def parser3(url):
 91     try:
 92         r = requests.get(url, headers=kv)
 93         print(r.status_code)
 94         demo = r.text
 95         soup = BeautifulSoup(demo, "html.parser")
 96         #print(soup.prettify())
 97         if soup.find_all("div", {"class": "col-xs-4 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().find(‘网友评价‘)!=-1:
 98             write("投诉"+"||")
 99         write(soup.find("strong").get_text().lstrip().rstrip()+"||")
100         write(soup.find_all("div", {"class": "col-xs-10 col-lg-3 col-sm-3 col-md-4 text-muted"})[0].get_text().lstrip(‘来信人:‘).lstrip().rstrip()+"||")
101         write(soup.find_all("div", {"class": "col-xs-5 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip(‘时间:‘)+"||")
102         write(soup.find_all("div", {"class": "col-xs-4 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip().rstrip().lstrip("网友评价数:").lstrip().rstrip()+"||")
103         write(soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-2 text-muted mx-2"})[0].get_text().lstrip().rstrip()+"||")
104         write(soup.find_all("div", {"class": "col-xs-9 col-sm-7 col-md-5 o-font4 my-2"})[0].get_text().lstrip().rstrip()+"||")
105         write(soup.find_all("div", {"class": "col-xs-12 col-sm-3 col-md-3 my-2"})[0].get_text().lstrip(‘答复时间:‘)+"||")
106         write(soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-4 text-muted my-3"})[0].get_text().lstrip().rstrip().replace(" ","")+"||")
107         write(soup.find_all("a", {"class": "dex_yes font12"})[0].get_text().lstrip().rstrip().replace(" ", "") + "||")
108         write(soup.find_all("a", {"class": "dex_no font12"})[0].get_text().lstrip().rstrip().replace(" ", "") + "||")
109         write(‘\r\n‘)
110     except:
111         print("投诉爬取失败!")
112
113 if __name__=="__main__":
114     read()

遇到的问题:

  忽视了read()和readline()读取后面的\n导致不停报错,在开始时没有看到投诉类型的信件和建议类型的信件,后来补上。

爬取的文本内容用||隔开,分别代表信件类型,标题,来信人,问题时间,网友评价,问题内容,回答方,回答时间,回答内容,赞,踩11个属性,存为E://result.txt文件内。

附上页面的ID(txt格式)百度网盘:https://pan.baidu.com/s/1GvF8Kllvv-vqBblgWnA-LQ

BeautifulSoup的安装和使用可以参考我的博客:https://www.cnblogs.com/zlc364624/p/12264070.html

原文地址:https://www.cnblogs.com/zlc364624/p/12271490.html

时间: 2024-08-30 14:11:18

假期学习【八】首都之窗百姓信件爬虫(完整版)2020.2.6 Python的相关文章

[Python]爬取首都之窗百姓信件网址id python 2020.2.13

经人提醒忘记发网址id的爬取过程了, http://www.beijing.gov.cn/hudong/hdjl/com.web.consult.consultDetail.flow?originalId=AH20021300174 AH20021300174为要爬取的内容 现代码如下: 1 import json 2 import requests 3 import io 4 5 url="http://www.beijing.gov.cn/hudong/hdjl/com.web.search

学习响应式设计(Learning Responsive Web Design)完整版PDF

想要为平板.手机.笔记本.大屏幕设备,甚至可穿戴设备提供最优的用户体验?那就学习响应式设计吧.这是一本内容特别全面.讲解非常透彻的入门书.特别地,通过这本书不仅能迅速掌握响应式Web设计的基本原理,还能够从头到尾了解响应式设计的工作流程:从项目启动开始,到项目最终上线为止. 只要你的工作与创建.改造或者升级网站有关系,都应该看看这本书.换句话说,不仅是前端开发人员,设计师.产品经理.项目经理,甚至后端开发人员也可以通过本书掌握响应式设计的精髓所在.这本书基于响应式设计的前沿技术和社区经验写成,汇

Linux学习总结(1)——Linux命令大全完整版

Linux命令大全完整版 目    录I 1. linux系统管理命令1 adduser1 chfn(change finger information)1 chsh(change shell)1 date2 exit3 finger4 free5 fwhois5 gitps(gnu interactive tools process status)5 groupdel(group delete)6 groupmod(group modify)6 halt7 id7 kill8 last8 la

Python 爬取 北京市政府首都之窗信件列表-[Scrapy框架](2020年寒假小目标04)

日期:2020.01.22 博客期:130 星期三 [代码说明,如果要使用此页代码,必须在本博客页面评论区给予说明] 今天来说一说爬取的工作进展,我们的要求是爬取首都之窗的信件类型,那么我们就开始吧! 首先,先找到网页:http://www.beijing.gov.cn/hudong/hdjl/com.web.search.mailList.flow 然后找到网页的结构,发现是简单的HTML结构,那我们就可以启动Scrapy框架了. 前边说了,之前是一直报403 Forbidden的错,原因我已

北京市政百姓信件分析实战(下)

首先是目录结构 Com.mieba.bean包里装的类是model,负责把数据封装起来 Com.mieba.dao包里装的类是负责和数据库打交道,把数据从数据库中取出来 Com.mieba.servlet包里装的类是控制器,负责把数据传输给view(jsp页面) 代码 1 package com.mieba.bean; 2 3 public class First { 4 5 private int year; 6 private int num; 7 public int getYear()

Oracle学习(八):处理数据

1.知识点:能够对比以下的录屏进行阅读 SQL> --SQL语句 SQL> --1. DML语句(Data Manipulation Language 数据操作语言): insert update delete select SQL> --2. DDL语句(Data Definition Language 数据定义语言): create/alter/drop/truncate table SQL> -- create/drop view,create/drop index(sequ

springMVC3学习(八)--全局的异常处理

在springMVC的配置文件中: <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="defaultErrorView"> <value>/error</value><!-- 表示当抛出异常但没有

Spark学习八:spark streaming与flume和kafka集成

Spark学习八:spark streaming与flume和kafka集成 标签(空格分隔): Spark Spark学习八spark streaming与flume和kafka集成 一Kafka 二flume和kafka的集成 三kafka和spark streaming的集成方式一kafka推送 四kafka和spark streaming的集成方式一spark streaam主动获取 五spark stream的高级应用updateStateByKey实现累加功能 六spark stre

我的假期学习报告2

我的假期学习报告2 复习进度报告 高等数学 已完成所有公式的默写工作,正在做题以增加熟练度. 概率论与数理统计 已完成第3章的复习工作. 操作系统 已完成第一.二.三章的PPT复习. 病情报告 已无大碍,没有任何后遗症:气温回暖,相信穿厚实点可以不会重蹈覆辙. 实践报告 已经在预约单位实践一星期,单位对我的工作表示积极肯定. 感想 我只能飞回北京了,多亏了这奇怪的抢票系统! 原文地址:https://www.cnblogs.com/battlefieldheros/p/8414733.html