基于Python的一网通办网公开数据爬取与实现

来源 :科学与财富 | 被引量 : 0次 | 上传用户:skyliou
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:目的:上海一网通办网作为典型的政府线上办公与数据公开网站,其设计具有广泛的代表性,本文通过研究与实际测试,实现了全站数据的抓取,为其他网站的数据爬取提供参考,为公共网络的大数据分析奠定基础。方法:通过谷歌浏览器查看对应网站的消息请求头和网页源码;将网站所有网页中的数据分为A类(网页数据直接获取类)和B类(网页数据异步获取类)。利用Python调用re、request和lxml等内置库与第三方库,模拟浏览器向服务器发送请求,对服务器返回的html和Json等格式的数据进行解析,对于异步传输的数据需要在浏览器中找到对应的json文件,再次查看消息头并发送请求获取异步数据,过滤出目标数据,最后写入到CSV格式的文本中。结果:经过研究与测试,爬虫成功爬取上海一网通办网上所有数据,爬取效率较高,爬取数据具有非常高的准确性;其中数据爬取的难点在于定位异步请求数据的文件和模拟浏览器请求异步数据。
  关键词:公开情报;情报获取Python;爬虫;数据爬取
  引言
  美国中央情报局前局长希伦科特曾指出:“ 大多数公开情报来源于诸如外国书刊、科技调查报告、图片、商业分析报告、报纸和新闻广播,以及精通国际关系的人提供的综合性看法之类的普遍渠道”。【[1]樊合成,陈树宁,王守宏.试论公开情报研究[J]. 现代情报,2004,01:52-54.】 如今,大多的情报存在于网络中,对网络上大量的公开数据进行爬取与分析会产生巨大的价值,这同样对于获取信息优势至关重要。而作为计算机与互联网融合孕育而生的大数据已不再只停留于IT行业,而是被广泛应用于各个领域,美国率先将大数据上升为国家战略并将其定義为“未来的新石油”。【[2]许阳,王程程.大数据推进政府治理能力现代化:研究热点与发展趋势[J]. 电子政务,2018,11:101-112.】我国在网络大数据应用方面的起步较晚,网络公开数据的爬取、分析与利用不够充分。本文利用典型的政府线上办公网:上海一网通办,实现对网站数据全部精准抓取,为其他公共网络的数据爬取提供支持与参考。本文所提供的爬取方法具有较高通用性,可以支持其他一般性网页的数据爬取。
  1 工具介绍
  为了简单、轻便的编写脚本,本文所涉及的爬虫未利用其他集成开发环境,而是选择的Python的官方开发工具IDLE。在爬虫编写过程中共涉及8个内置和第三方库分别为:os、 sys、time、re、json、requests、chardet和lxml。其中requests库用于模拟浏览器向服务器发送请求;chardet用于检测数据编码格式,以便用对数据进行解析;lxml库用于高效解析HTML和XML文件,支持XPath解析方式。数据存储选择的是通用的CSV格式,主要是方便以后导入各类数据库或者直接进行Excel编辑。
  2 爬虫实现
  编写网络爬虫是从互联网上获取数据的重要方式,通常一个网页的数据需要浏览器发送多次请求以获取不同类型的数据,例如,上海一网通办主页于2019年7月8日请求网页内容共发送88个请求。如果需要爬取的数据属于网页中的A类数据,那么此类数据在网页中直接获取,这类数据是网页中数据存在的普遍形式,爬取时的操作也相对比较简单。如果需要爬取的数据属于网页中的B类数据,此类数据通常需要执行网页中的JavaScript代码才能获取,也就是需要再次发送数据请求,此类数据获取相对比较难。本文分别就A类和B类两类数据,从一网通办网站上分别选取:市委领导信箱和户籍办理两个典型的模块进行分析和说明。
  2.1 市委领导信箱爬虫设计与实现
  市委领导信箱公开数据爬取设计流程大致为:第一,获取邮件列表目录所在的网页数据,利用chatdet库分析网页编码格式并解析数据,从中爬取每个邮件的网络地址并发送请求。第二,从目录首页获取爬取的总页码。第三,分析每一个邮件目录页的网址规则,自动翻页,遍历每页邮件目录页,并向每一个邮件网络地址发送请求并爬取邮件内容。第四,清洗邮件内容并写入CSV文件。
  以下是该模块爬虫实现的源代码:
  (已隐去导入库代码)
  #step1:获取邮件列表目录所在的网页数据
  r = requests.get('http://wsxf.sh.gov.cn/xf_swldxx/feedback_list.aspx?PageName=hfxd')#获取信箱目录列表网页数据
  page_number = 0   #新建预存信箱列表页数的全局变量
  dirpath = '一网通办'+ time.strftime("%Y-%m-%d", time.localtime())#预存数据文件保存路径
  if not os.path.exists(dirpath): #确认文件保存路径是否存在,如果不存在就新建相应路径
  os.mkdir(dirpath)
  def grabble_mail(r):#定义爬取每一个目录页的爬虫函数
  global dirpath
  try:
  r.raise_for_status()   #确认请求是否相应正常
  print('爬取正常')
  except:
  print('错误状态码:'+ str(r.status_code))
  #利用chatdet库分析网页编码格式,并解析数据
  charinfo = chardet.detect(r.content)  #分析网页的编码格式
  print('目标网页 编码信息:')
  print(charinfo)   r_text = r.content.decode(charinfo['encoding'],errors='ignore')  #用分析得到的编码格式解析数据
  cl_text = r_text.replace('\n','')  #数据清理去掉数据中的回车符号
  r_tree = etree.HTML(r_text)   #利用lxml中的etree库解析html文件
  #step2:确定邮件目录页总页数
  if not re.findall('\d+',r.url):#通过首页数据中的“共几页”确定总爬取页数
  global page_number
  page_number = int(re.findall('第\d+页 共(\d+)页 共\d+条',r_tree.xpath('//*[@id="main"]/tbody/tr/td[2]/div//text()')[5])[0])
  print('共有'+ str(page_number)+ '个目录页')
  #step3:爬取每一页中的每一个邮件网络地址并再次访问每一个网络地址爬取邮件内容
  a_taglist = r_tree.xpath('//*[@id="FBList"]/tbody//a')#爬取邮件目录列表中每个邮件的网络地址
  try:
  for a in range(len(a_taglist)):
  try:
  sub_r = requests.get('http://wsxf.sh.gov.cn/xf_swldxx/' + a_taglist[a].attrib["href"])
  sub_charinfo = chardet.detect(sub_r.content)
  print('爬取:'+ a_taglist[a].attrib["href"])
  sub_r_text = sub_r.content.decode(sub_charinfo['encoding'], errors='ignore')
  sub_cl_text = sub_r_text.replace('\r', '')
  sub_r_tree = etree.HTML(sub_cl_text)
  sub_title = sub_r_tree.xpath('//*[@id="MainContent_LaTitle"]//text()')[0]
  sub_date = sub_r_tree.xpath('//*[@id="MainContent_LaDate"]//text()')[0]
  sub_content = sub_r_tree.xpath('//*[@id="MainContent_LaContent"]//text()')[0]
  sub_pbdate =  sub_r_tree.xpath('//*[@id="MainContent_LaHFDate"]//text()')[0]
  sub_departm = sub_r_tree.xpath('//*[@id="MainContent_LaDeptment"]//text()')[0]
  sub_disposition = sub_r_tree.xpath('//*[@id="MainContent_LaDisposition"]//text()')[0]
  #step4:把邮件内容清除掉回車和逗号之后写入csv文件,因为回车和逗号会影响CSV结构
  with open(dirpath + '/' + '市委领导信箱' + '-' + time.strftime("%Y-%m-%d", time.localtime()) + '.csv', 'a+') as f:
  f.write(sub_title.replace('\n', '').replace(',','').strip())
  f.write(',')
  f.write(sub_date.replace('\n', '').replace(',','').strip() )
  f.write(',')
  f.write(sub_content.replace('\n', '').replace(',','').strip() )
  f.write(',')
  f.write(sub_pbdate.replace('\n', '').replace(',','').strip() )
  f.write(',')
  f.write(sub_departm.replace('\n', '').replace(',','').strip() )
  f.write(',')
  f.write(sub_disposition.replace('\n', '').replace(',','').strip() )
  f.write('\n')
  except:
  print('错误子链接')
  continue
  except:
  print('错误链接')
  grabble_mail(r) #真实执行爬取首页中每一个邮件的内容
  #step3:分析每一个邮件目录页的网址规则,自动翻页,爬取所有页面中邮件内容   for p in range(page_number - 1):  #遍历所有子页的邮件内容
  r = requests.get('http://wsxf.sh.gov.cn/xf_swldxx/feedback_list.aspx?PageName=hfxd&CurrentPage=' + str(p+2))
  grabble_mail(r)
  2.2 户籍办理模块爬虫设计与实现
  上海一网通办网户籍办理模块的内容结构不同于其他数据直接获取模块,打开户籍办理模块网址,第一项与户籍办理有关的链接是“外省市职工(家属)进沪审批”,进一步打开此网址,发现里面包含一些跟户籍办理有关的很多数据,这些数据对于我们来说是有意义的。如果我们依旧按照A类数据爬去的方式爬取此网页的内容,其数据结果中会缺失关于申请材料目录表格中的所有数据,因为这部分数据不直接存在于此网页的请求中,需要找到这部分数据的真实位置。从申请材料目录表格中选取第一个单元格的数据,利用谷歌浏览器的开发者工具,在所有的网页请求中查找该数据的位置,结果如图1所示:
  该异步数据,存在于名为:getStuffs.do?stId=e650f03c-6a43-4ee1-8eed-8bf763303b40的文件中,右侧黄色部分显示该文件的数据格式是json格式。通过进一步查看右侧黄色数据,可以得知,该申请材料目录的所有数据都在该文件中。至此,确定了异步数据的位置,需要模拟浏览器向服务器发送请求,自动获取这部分数据。设计步骤大致为:第一,从浏览器开发者工具中获取数据链接和请求头部数据。第二,模拟浏览器发送带有headers的请求,获取数据并用chardet库解析数据。第三,利用json库解析数据保存为Python字典格式。数据解析后就可以根据字典数据格式写入CSV文件中。
  具体源码如下:
  (已隐去爬取非异步数据代码和写入文件代码)
  import json    #导入json内置库
  #step1:从浏览器中获取链接和请求头部数据
  page_url = 'http://zwdt.sh.gov.cn/govPortals/bsfw/findBsfw.do?_organName_=&_organCode_=&_organType_=&_ite\
  mId=SH00SH310100259001&_itemType=%E5%AE%A1%E6%89%B9&_stSubitemId=' #从浏览器中获取请求链接
  headers ={
  'Accept':'application/json, text/javascript, */*; q=0.01',
  'Accept-Encoding':'gzip, deflate, sdch',
  'Accept-Language':'zh-CN,zh;q=0.9',
  'Cache-Control':'max-age=0',
  'Connection':'keep-alive',
  'Cookie':'SESSION=a159c731-35a5-496c-898b-3f2c5f539d2d; vlstatId=vlstat-1560838562000-461355658\
  ; wondersLog_zwdt_sdk=%7B%22persistedTime%22%3A1562202400121%2C%22userId%22%3A%22%22%2C%22superP\
  roperties%22%3A%7B%7D%2C%22updatedTime%22%3A1562376483091%2C%22sessionStartTime%22%3A156237052873\
  2%2C%22sessionReferrer%22%3A%22%22%2C%22deviceId%22%3A9018665097371420%2C%22LASTEVENT%22%3A%7B%22e\
  ventId%22%3A%22wondersLog_pv%22%2C%22time%22%3A1562376483087%7D%2C%22sessionUuid%22%3A1413119687751\
  188%2C%22costTime%22%3A%7B%7D%7D',
  'Host':'zwdt.sh.gov.cn',
  'Referer':'http://zwdt.sh.gov.cn/govPortals/bsfw/findBsfw.do?_organName_=&_organCode_=&_organType_=&_\
  itemId=SH00SH310100327001&_itemType=%E5%AE%A1%E6%89%B9&_stSubitemId=',
  'Upgrade-Insecure-Requests':'1',
  'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3\
  029.110 Safari/537.36 SE 2.X MetaSr 1.0',
  'X-Requested-With': 'XMLHttpRequest'
  }
  #step2:模擬浏览器发送带有headers的请求获取数据,并用chardet库解析数据   jr = requests.get(page_url,headers = headers)
  charinfo = chardet.detect(jr.content)
  jr_text = jr.content.decode(charinfo['encoding'], errors='ignore')
  #step3:利用json库解析数据保存为Python字典格式
  pyjs = json.loads(jr_text)
  3 测试与评价
  对本文实现的爬虫进行爬取效率和准确率测试,爬虫运行的环境参数为:Windows10 专业版操作系统,Intel(R) Core(TM) i3 CPU M 350 @2.27GHz处理器,4.00GB RAM,网络为第四代移动通信技术。爬取市委领导信箱27页共524封信件用时519.89秒,数据准确率为100%,因为网站的信件结构规范,无噪音数据。户籍信息的数据量少爬取用时5.25秒,数据准确率为100%。
  从实际测试结果看,爬虫的效率较高,每封信件的爬取用时保持在1秒以内,数据爬取的准确率极高,该爬虫的实用性高。
  4 结束语
  本文所设计与实现的爬虫具有通用性,对于一般性网站公开数据的爬取具有很好的借鉴意义。其主要有以下几个特点:
  (1)爬虫的代码简洁、轻巧,设计思路清晰直观
  (2)爬虫的爬取策略适用性强,对于一般网站的公开数据爬取有较强借鉴意义
  (3)自动化程度高,自动翻页遍历访问所有二级链接爬取数据
  (4)爬取效率与准确率较高,为下一步数据分析奠定良好基礎
  参考文献:
  [1]樊合成,陈树宁,王守宏.试论公开情报研究[J]. 现代情报,2004,01:52-54.
  [2]许阳,王程程.大数据推进政府治理能力现代化:研究热点与发展趋势[J].电子政务,2018,11:101-112.
  [3]李培.基于Python的网络爬虫与反爬虫技术研究[J].计算机与数字工程,2019(06):1415-1496.
  [4]曾泓竣,曾千容.探析数据爬取中的相关知识产权问题[J].法制博览,2019(17):225.
  [5]S. R. Mani Sekhar,G. M. Siddesh,Sunilkumar S. Manvi,K. G. Srinivasa.Optimized Focused Web Crawler with Natural Language Processing Based Relevance Measure in Bioinformatics Web Sources[J].Cybernetics and Information Technologies,2019,19(2).
  [6]Anonymous.Tiger sheds cables with battery-operated rack crawler[J].Concrete Products,2019,122(6).
  [7]胡俊潇,陈国伟.网络爬虫反爬策略研究[J].科技创新与应用,2019(15):137-138+140.
  作者简介:
  丁晓阳(1990-),男,国防大学政治学院研究生,主要研究方向:网络舆情。
  王兰成(1962-),男,国防大学知名教授,博士生导师,主要研究方向:网络舆情,图书情报与档案管理。
其他文献
摘 要:避难趋优心理潜藏在日常生活当中,也就是说生产生活中的各个迹象都可体现出普遍存在的避难趋优心理。文章在分析避难趋优心理时,充分考虑了《战胜拖拉》里的理论。在企业管理当中应用避难趋优心理可以起到强化企业管理的作用,实际的管理中,避难趋优心理以正向和反向两种形式体现出来,借助暗示员工的方式达成预期的激励目标,消除人们的消极情绪。该种方式具备十分优越的性能及作用,在人们接受避难趋优的心理暗示后,会
期刊
摘 要:煤焦油含水量大,工艺上处理后的煤焦油水分能达到2%,该样品是混合物且不均匀,直接用于实验则检验结果误差较大,必须再次脱水直到含水率达到约0.1%,本文针对煤焦油实验样品脱水以及煤焦油样品脱水过程中轻油损失量定量问题,利用普通电热套、蒸馏烧瓶除水,电子天平能达到制样目的。  关键词:煤焦油; 脱水;电热套;蒸馏烧瓶  目前煤焦油脱水有三种方法:1、静止脱水使焦油与水分离。即焦油在容器内加热保
期刊
摘 要:文章以组织心理学为视角,系统地分析了以员工为中心的企业社会责任,其中还涉及到与组织行为及企业社会责任构建等多项内容。分析员工为中心的企业社会责任的目的在于明确划分企业员工的社会责任,对其内涵进行界定。此种背景下,企业员工的社会责任驱动机制得以顺利加深,无论是与行为效应相关的理论,还是实践,都得到了较大的进步,这对企业员工社会责任的发展有一定的指导意义。此外,文章系统地分析了社会责任的概念基
期刊
摘 要:公司章程是基于公司各股东的意思形成的契约,也是进行公司治理的工具。通过公司章程,股东可以实现对公司的治理,同时借助公司章程实现股东权益的最大化。公司章程自治包括订立自由、修改自由和内容自由,有其存在的理论基础。但公司章程自治不等于绝对的、不加任何限制的自治。公司章程自身缺陷及外部因素决定了公司章程必须划定法律边界。确定我国公司章程法律边界应当坚持维护公平正义与实现效率的基本原则。我国公司章
期刊
摘 要:作为社区教育的重要组成部分,社区老年教育有效的融入到了家庭、学校及社区当中,是一项终身性的教育活动。开放大学作为重要的载体,承担了地方上的教育,在社区老年教育中,开放大学同样有责任并有义务参与其中,开放大学与社区老年教育的融合也是我国社会教育发展的必然趋势,但是二者在融合时面对诸多问题,只有解决好其中存在的问题,才能使开放大学以更好的状态参与到社区老年教育中。所谓社会心理学就是针对人与社会
期刊
摘 要:随着经济的不断发展,我国企业的发展也进入了新阶段。在企业的发展过程中,企业项目管理水平是企业进行发展的重要基础。而项目管理成熟度模型也被引入到企业发展过程中来,作为一种全新的概念,为企业的发展做出贡献。项目管理成熟度模型以项目管理过程为基础,在项目管理过程中吸收和借鉴经验,进行企业项目管理成熟的不断升级。企业项目管理水平的发展是逐步进行的,在进行企业项目管理的发展中,首次经历混乱,然后进行
期刊
摘 要:在党的发展和建设过程中,党务管理工作具备重要意义,这也是党的各项工作开展落实的重点内容所在。本文对提升党务管理科学化的重要意义进行总结,并从党务管理和党的建设相结合、注重党务管理的规范化、党务管理方法的现代化发展、注重党务管理信息化发展四方面,论述了党务管理科学化发展策略。  关键词:党务管理;科学化;信息化  前言:在具体党建科学化水平提升上,是党务管理科学化发展的基础所在,对于各项党务
期刊
摘 要:科技时代的到来促进的信息技术的快速发展,电子资料逐渐替代了纸质资料在各行各业的应用。同时,在会计方面也不断地在倡导会计资料的无纸化,就是对我国传统会计理念的一个冲击,对会计资料的存档不必再像以前一样要用大量的纸质资料来进行存档,而是可以在一定的条件下用电子资料用于存档,对于传统会计而言,就是一个新的突破,为会计工作提供了便利,同时也减少了各种资源的浪费。本文就从如何实现会计资料无无纸化以及
期刊
摘 要:雷暴是目前公认的严重威胁飞行安全的天气现象,能产生各种危及飞行及安全的天气现象。例如当飞机穿越雷暴云上部时,会产生积冰;而在积雨云中强烈的湍流会引起航空器颠簸。而且雷雨还能使能见度变差,当雷雨的下方容易出现较强的下沉气流,会导致航空器掉高度。而不管航空器是在云中、云下或者云上附近飞行时,都有被闪电击中的概率,一旦被闪电击中,轻则航空器外部受损,重则危及机组及乘客的安全。而有时雷暴过程中所伴
期刊
摘 要:在我国汽车行业近年来快速发展的过程中,对于物流系统的建设与应用也具有了新的要求。通过自动化物流系统的建设与应用,对于汽车行业的进一步发展具有十分积极的意义。在本文中,将就自动化物流系统在汽车行业的应用进行一定的研究。  关键词:自动化物流系统;汽车行业;应用;  1 引言  近年来,我国的汽车行业获得了快速的发展,相关汽配件的类型也不断增加,并在市场中具有较大的需求。在该种情况,如何通过科
期刊