假期学习【九】首都之窗百姓信件爬取代码优化以及处理 2020.2.7 Python
今天对爬取程序进行了优化,修正了错误。
遇到了两个问题与错误:
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的更多相关文章
- 假期学习【八】首都之窗百姓信件爬虫(完整版)2020.2.6 Python
时间:2020.2.6 今天把昨天做到一半的首都之窗百姓信件爬取完成了. 源码如下: import requests import io from bs4 import BeautifulSoup # ...
- 假期学习【十】首都之窗百姓信件JavaWweb+Echarts图表展示
今天主要对昨天爬取的数据进行处理,处理后用Echart图表展示, 效果如下:
- [Python]爬取首都之窗百姓信件网址id python 2020.2.13
经人提醒忘记发网址id的爬取过程了, http://www.beijing.gov.cn/hudong/hdjl/com.web.consult.consultDetail.flow?original ...
- Python 爬取 北京市政府首都之窗信件列表-[Scrapy框架](2020年寒假小目标04)
日期:2020.01.22 博客期:130 星期三 [代码说明,如果要使用此页代码,必须在本博客页面评论区给予说明] //博客总体说明 1.准备工作(本期博客) 2.爬取工作 3.数据处理 4.信息展 ...
- # C语言假期学习笔记——6
C语言假期学习笔记--6 数组 主要学习了一位数组和二维数组. 数组是一组具有相同类型的变量的集合.C语言程序通过元素的下标来访问数组中的元素.(下标从0开始) 一位数组 类型 数组名[元素个数] 二 ...
- Python 爬取 北京市政府首都之窗信件列表-[信息展示]
日期:2020.01.25 博客期:133 星期六 [代码说明,如果要使用此页代码,必须在本博客页面评论区给予说明] //博客总体说明 1.准备工作 2.爬取工作 3.数据处理 4.信息展示(本期博客 ...
- Python 爬取 北京市政府首都之窗信件列表-[数据处理]
日期:2020.01.24 博客期:132 星期五 [代码说明,如果要使用此页代码,必须在本博客页面评论区给予说明] //博客总体说明 1.准备工作 2.爬取工作 3.数据处理(本期博客) 4.信息展 ...
- Python 爬取 北京市政府首都之窗信件列表-[后续补充]
日期:2020.01.23 博客期:131 星期四 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] //博客总体说明 1.准备工作 2.爬取工作(本期博客) 3.数据处理 ...
- 侯捷STL学习(九)--关联式容器(Rb_tree,set,map)
layout: post title: 侯捷STL学习(九) date: 2017-07-21 tag: 侯捷STL --- 第十九节 容器rb_tree Red-Black tree是自平衡二叉搜索 ...
随机推荐
- JS用map做接口数据映射
· 接口做数据映射的好处:前端页面自定义的字段不需要和后端字段相同,后端修改字段前端不受影响. · 从接口得到数据 res: let r = res.map(item => { return { ...
- JS获取最近三个月日期范围
function getLast3Month() { var now = new Date(); var year = now.getFullYear(); var month = now.getMo ...
- Android之ScrollView嵌套ListView冲突 (listView只显示一行)
在ScrollView中嵌套使用ListView,ListView只会显示一行多一点.两者进行嵌套,即会发生冲突.由于ListView本身都继承于ScrollView,一旦在ScrollView中嵌套 ...
- 12.python内置模块之sys模块介绍
python的sys模块是与python解释器交互的一个接口,提供对解释器使用或维护的一些变量的访问,即与解释器强烈交互的函数. sys模块的常用函数: 1.sys.argv:命令行参数列表.第一个元 ...
- 今天带来compass的使用方式
一.为什么我们要使用compass呢 Experience cleaner markup without presentational classes. It’s chock full of the ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(8)
目录 Binutils 软件包有什么用? make -k 的作用是什么? man-pages 里有几种文档?分别表示什么意思? 如何查询指定目录的 man-pages ? 如何使用 make 命令的同 ...
- 数据分析----天气预报走向(pygal)
#!usr/bin/env python #-*- coding:utf-8 _*- """ @author:Administrator @file: 可视化天气预报.p ...
- 一起学Vue之条件判断
在Vue进行前端开发中,条件判断主要用于根据不同的条件来决定显示或隐藏,或者进行视图之间的切换,本文以一个简单的小例子简述v-if的常见用法,仅供学习分享使用,如有不足之处,还请指正. v-if 指令 ...
- header.vue 调用变量,别的组件导入引用,组件方法事例实例
<template> <div id="header"> <!-- 调用变量 --> <h1>{{ msg }}</h1> ...
- Vue中富文本编辑器(vue-quill-editor)的使用
1. 安装 npm install vue-quill-editor --save 2. 导入并挂载 import VueQuillEditor from 'vue-quill-editor' // ...