今天对爬取程序进行了优化,修正了错误。

遇到了两个问题与错误:

1.忘记了对文件的读写设置格式,导致导入Hive数据库无法正常显示以及写入。

2.文件的读写操作有误导致数据量仅有应该有的1/2

不完整的爬取经过Hive数据库处理后得到的数据如下:

总数:15031

20061298

20072104

2008658

2009409

2010770

2011318

2012289

2013480

20142031

20151884

20161738

20171075

2018853

20191003

2020121

建议6569

投诉4843

咨询3619

公交集团公司4592

市公安局公安交通管理局1401

丰台区1341

市人力社保局1093

海淀区961

朝阳区717

市规划自然资源委594

市公安局440

市住房城乡建设委327

东城区285

北京住房公积金管理中心282

大兴区196

石景山区183

北京地铁公司172

市人口计生委150

昌平区132

市国资委121

市交通委97

通州区96

房山区95

延庆区86

投诉83

市民政局79

市运输管理局76

门头沟区76

北京经济技术开发区75

市路政局75

歌华有线公司73

西城区71

市教委71

建议69

市地税局69

顺义区67

北京电力公司63

市卫生健康委60

市发展改革委60

市卫生局55

市通信管理局51

北京市1234550

平谷区47

市城市管理委43

北京市邮政公司33

市公园管理中心33

密云区28

怀柔区27

首都之窗24

咨询24

燃气集团有限责任公司19

市城管执法局16

市文化和旅游局16

市广电局15

市生态环境局13

市园林绿化局11

自来水集团有限责任公司10

市司法局10

热力集团有限责任公司10

市委社会工委市民政局9

市水务局7

市医保局7

北京市税务局6

市文物局5

市市场监督管理局4

市财政局4

一体化互动交流平台3

市重大办3

市退役军人事务局3

市新闻出版局3

市体育局3

市农委2

市商务局2

市监狱管理局2

市统计局2

市农业局1

市民族宗教委1

市应急管理局1

现修正代码:

 import requests
import io
from bs4 import BeautifulSoup kv = {'user-agent': 'Mozilla/5.0'}
id='AH20010700179'
number=0 def test():
url="http://www.beijing.gov.cn/hudong/hdjl/com.web.suggest.suggesDetail.flow?originalId=AH20020400357" # 建议
parser2(url) def read():
f=open('E://list.txt','r')
for line in f:
id=line.rstrip('\n')
print(id)
print("爬取量:" ,number)
url1 = "http://www.beijing.gov.cn/hudong/hdjl/com.web.consult.consultDetail.flow?originalId=" + id # 咨询
url2 = "http://www.beijing.gov.cn/hudong/hdjl/com.web.suggest.suggesDetail.flow?originalId=" + id # 建议
url3 = "http://www.beijing.gov.cn/hudong/hdjl/com.web.complain.complainDetail.flow?originalId=" + id # 投诉
parser(url1)
parser2(url2)
parser3(url3)
f.close() def write(contents):
f=open('E://result.txt','a+',encoding='utf-8')
f.write(contents)
print(contents,'写入成功!')
f.close() def parser(url):
try:
global number
r = requests.get(url, headers=kv)
print(r.status_code)
demo = r.text
soup = BeautifulSoup(demo, "html.parser")
#print(soup.prettify())
'''print("标题:", soup.find("strong").get_text().lstrip().rstrip())
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())
print("时间:",soup.find_all("div", {"class": "col-xs-5 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip('时间:'))
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())
print("问题:", soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-2 text-muted mx-2"})[0].get_text().lstrip().rstrip())
print("官方:", soup.find_all("div", {"class": "col-xs-9 col-sm-7 col-md-5 o-font4 my-2"})[0].get_text())
print("回答时间:",soup.find_all("div", {"class": "col-xs-12 col-sm-3 col-md-3 my-2"})[0].get_text().lstrip('答复时间:'))
print("回答:", soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-4 text-muted my-3"})[0].get_text().lstrip().rstrip())'''
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:
write("咨询"+"\t")
number+=1
write(soup.find("strong").get_text().lstrip().rstrip()+"\t")
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()+"\t")
write(soup.find_all("div", {"class": "col-xs-5 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip('时间:')+"\t")
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()+"\t")
write(soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-2 text-muted mx-2"})[0].get_text().lstrip().rstrip()+"\t")
write(soup.find_all("div", {"class": "col-xs-9 col-sm-7 col-md-5 o-font4 my-2"})[0].get_text().lstrip().rstrip()+"\t")
write(soup.find_all("div", {"class": "col-xs-12 col-sm-3 col-md-3 my-2"})[0].get_text().lstrip('答复时间:')+"\t")
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(" ","")+"\t")
write(soup.find_all("a", {"class": "dex_yes font12"})[0].get_text().lstrip().rstrip().replace(" ", "") + "\t")
write(soup.find_all("a", {"class": "dex_no font12"})[0].get_text().lstrip().rstrip().replace(" ", "") + "\t")
write("\r")
except:
print("咨询爬取失败!") def parser2(url):
try:
global number
r = requests.get(url, headers=kv)
print(r.status_code)
demo = r.text
soup = BeautifulSoup(demo, "html.parser")
#print(soup.prettify())
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:
write("建议"+"\t")
number += 1
write(soup.find("strong").get_text().lstrip().rstrip()+"\t")
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()+"\t")
write(soup.find_all("div", {"class": "col-xs-5 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip('时间:')+"\t")
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()+"\t")
write(soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-2 text-muted mx-2"})[0].get_text().lstrip().rstrip()+"\t")
write(soup.find_all("div", {"class": "col-xs-9 col-sm-7 col-md-5 o-font4 my-2"})[0].get_text().lstrip().rstrip()+"\t")
write(soup.find_all("div", {"class": "col-xs-12 col-sm-3 col-md-3 my-2"})[0].get_text().lstrip('答复时间:')+"\t")
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(" ","")+"\t")
write(soup.find_all("a", {"class": "dex_yes font12"})[0].get_text().lstrip().rstrip().replace(" ", "") + "\t")
write(soup.find_all("a", {"class": "dex_no font12"})[0].get_text().lstrip().rstrip().replace(" ", "") + "\t")
write("\r")
except:
print("建议爬取失败!") def parser3(url):
try:
global number
r = requests.get(url, headers=kv)
print(r.status_code)
demo = r.text
soup = BeautifulSoup(demo, "html.parser")
#print(soup.prettify())
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:
write("投诉"+"\t")
number += 1
write(soup.find("strong").get_text().lstrip().rstrip()+"\t")
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()+"\t")
write(soup.find_all("div", {"class": "col-xs-5 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip('时间:')+"\t")
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()+"\t")
write(soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-2 text-muted mx-2"})[0].get_text().lstrip().rstrip()+"\t")
write(soup.find_all("div", {"class": "col-xs-9 col-sm-7 col-md-5 o-font4 my-2"})[0].get_text().lstrip().rstrip()+"\t")
write(soup.find_all("div", {"class": "col-xs-12 col-sm-3 col-md-3 my-2"})[0].get_text().lstrip('答复时间:')+"\t")
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(" ","")+"\t")
write(soup.find_all("a", {"class": "dex_yes font12"})[0].get_text().lstrip().rstrip().replace(" ", "") + "\t")
write(soup.find_all("a", {"class": "dex_no font12"})[0].get_text().lstrip().rstrip().replace(" ", "") + "\t")
write("\r")
except:
print("投诉爬取失败!") if __name__=="__main__":
read()
#test()

数据量约为3W+,新爬取的数据打算尚未整理完,打算明天再进行处理以及可视化。

总数:15031
2006129820072104200865820094092010770201131820122892013480201420312015188420161738201710752018853201910032020121

建议6569投诉4843咨询3619

公交集团公司4592市公安局公安交通管理局1401丰台区1341市人力社保局1093海淀区961朝阳区717市规划自然资源委594市公安局440市住房城乡建设委327东城区285北京住房公积金管理中心282大兴区196石景山区183北京地铁公司172市人口计生委150昌平区132市国资委121市交通委97通州区96房山区95延庆区86投诉83市民政局79市运输管理局76门头沟区76北京经济技术开发区75市路政局75歌华有线公司73西城区71市教委71建议69市地税局69顺义区67北京电力公司63市卫生健康委60市发展改革委60市卫生局55市通信管理局51北京市1234550平谷区47市城市管理委43北京市邮政公司33市公园管理中心33密云区28怀柔区27首都之窗24咨询24燃气集团有限责任公司19市城管执法局16市文化和旅游局16市广电局15市生态环境局13市园林绿化局11自来水集团有限责任公司10市司法局10热力集团有限责任公司10市委社会工委市民政局9市水务局7市医保局7北京市税务局6市文物局5市市场监督管理局4市财政局4一体化互动交流平台3市重大办3市退役军人事务局3市新闻出版局3市体育局3市农委2市商务局2市监狱管理局2市统计局2市农业局1市民族宗教委1市应急管理局1

假期学习【九】首都之窗百姓信件爬取代码优化以及处理 2020.2.7 Python的更多相关文章

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

    时间:2020.2.6 今天把昨天做到一半的首都之窗百姓信件爬取完成了. 源码如下: import requests import io from bs4 import BeautifulSoup # ...

  2. 假期学习【十】首都之窗百姓信件JavaWweb+Echarts图表展示

    今天主要对昨天爬取的数据进行处理,处理后用Echart图表展示, 效果如下:

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

    经人提醒忘记发网址id的爬取过程了, http://www.beijing.gov.cn/hudong/hdjl/com.web.consult.consultDetail.flow?original ...

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

    日期:2020.01.22 博客期:130 星期三 [代码说明,如果要使用此页代码,必须在本博客页面评论区给予说明] //博客总体说明 1.准备工作(本期博客) 2.爬取工作 3.数据处理 4.信息展 ...

  5. # C语言假期学习笔记——6

    C语言假期学习笔记--6 数组 主要学习了一位数组和二维数组. 数组是一组具有相同类型的变量的集合.C语言程序通过元素的下标来访问数组中的元素.(下标从0开始) 一位数组 类型 数组名[元素个数] 二 ...

  6. Python 爬取 北京市政府首都之窗信件列表-[信息展示]

    日期:2020.01.25 博客期:133 星期六 [代码说明,如果要使用此页代码,必须在本博客页面评论区给予说明] //博客总体说明 1.准备工作 2.爬取工作 3.数据处理 4.信息展示(本期博客 ...

  7. Python 爬取 北京市政府首都之窗信件列表-[数据处理]

    日期:2020.01.24 博客期:132 星期五 [代码说明,如果要使用此页代码,必须在本博客页面评论区给予说明] //博客总体说明 1.准备工作 2.爬取工作 3.数据处理(本期博客) 4.信息展 ...

  8. Python 爬取 北京市政府首都之窗信件列表-[后续补充]

    日期:2020.01.23 博客期:131 星期四 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] //博客总体说明 1.准备工作 2.爬取工作(本期博客) 3.数据处理 ...

  9. 侯捷STL学习(九)--关联式容器(Rb_tree,set,map)

    layout: post title: 侯捷STL学习(九) date: 2017-07-21 tag: 侯捷STL --- 第十九节 容器rb_tree Red-Black tree是自平衡二叉搜索 ...

随机推荐

  1. drf token刷新配置、认证组件(使用)、权限组件(使用)、频率组件(使用)、异常组件(使用)

    目录 一.特殊路由映射的请求 二.token刷新机制配置(了解) 三.认证组件项目使用:多方式登录 1.urls.py 路由 2.views.py 视图 3.serializers.py 序列化 4. ...

  2. NIO-WindowsSelectorImpl源码分析

    目录 NIO-WindowsSelectorImpl源码分析 目录 前言 初始化WindowsSelectorProvider 创建WindowsSelectorImpl WindowsSelecto ...

  3. js中如果遇到低版本安卓设备调用setTimeout不生效解决办法

    工作中会遇到低版本安卓设备调用setTimeout不生效,既不会报错,里面的函数也不会执行,这里po一个解决办法,如果不执行则执行安卓自己封装的原生的setTimeout方法:sdk.setTimeo ...

  4. Maven 父子工程的一些细节

    Project,项目,也叫做工程. 父子工程中,子模块会自动继承父工程的资源.依赖,但子模块之间是独立的,不能直接访问彼此中的资源.类. 就是说我们可以把多个子模块都要用的资源.依赖提出来,放到父工程 ...

  5. 【STM32H7教程】第46章 STM32H7的ADC应用之DMA方式多通道采样

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第46章       STM32H7的ADC应用之DMA方式多 ...

  6. Node.js核心模块-net

    net.Socket 类 socket.remotePort 访问服务器的远程端口 const http = require('http'); const server = http.createSe ...

  7. LeetCode 面试题 02.01. 移除重复节点

    编写代码,移除未排序链表中的重复节点.保留最开始出现的节点. 示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3]示例2: 输入:[1, 1, 1, 1, 2] 输出:[1, ...

  8. cra

    const paths = require('react-scripts/config/paths'); paths.appBuild = path.join(path.dirname(paths.a ...

  9. Spring boot2.0学习笔记(一)

    学习环境: jdk1.8 (Spring Boot 推荐jdk1.8及以上): java version "1.8.0_241" Maven 3.x (maven 3.2 以上版本 ...

  10. 【python基础语法】第1天作业练习题

    # 1.下面那些不能作为标识符? """ 1.find 2. _num 3.7val 4.add. 5.def 6.pan 7.-print 8.open_file 9. ...