今天对爬取程序进行了优化,修正了错误。
遇到了两个问题与错误:
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