假期学习【九】首都之窗百姓信件爬取代码优化以及处理 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

现修正代码:

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

数据量约为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

猜你喜欢

转载自www.cnblogs.com/zlc364624/p/12274118.html