工作中,再次需要python,发现python用得好 ,真的可以节省很多人力,先说我的需求,需要做一个类似像支付宝添加收货地址时,选择地区的功能,需要详细到街道信息,也就是4级联动,如右图。首先需要的就是级联的数据,许是百度能力太差,找不到想要的,或者想要的需要积分才能下载,没有积分,只能干巴巴看着,好无奈,想起国家统计局有这个,以前在那里下载过,是一个表格,现在也忘记放哪里了,在它的官网找了好久,都没找到,后来是如何找到这个链接的也忘记了:http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/index.html,找到链接,第一个想到的就是pathon,于是决定靠自己丰衣足食。最后的代码如下,才70多行,咋一下不难,但也花费了我2天时间,脑袋有时候还是不够清晰。

  1. 1 # -*-coding:utf-8 -*-
  2. 2 import urllib2,urllib
  3. 3 from selenium import webdriver
  4. 4 import time
  5. 5 import sys
  6. 6 reload(sys)
  7. 7 sys.setdefaultencoding('utf-8')
  8. 8 import os
  9. 9
  10. 10 def writeData(tasklist):
  11. 11 conf = 'ck.txt'
  12. 12 file = open("%s/%s" % (os.path.abspath(os.path.dirname(__file__)), conf),"a+")
  13. 13 file.write(tasklist)
  14. 14 file.close()
  15. 15
  16. 16 chrome = webdriver.Chrome()
  17. 17 chrome.get("http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/index.html")
  18. 18 time.sleep(10)
  19. 19 href=[]
  20. 20 href1=[]
  21. 21 href2=[]
  22. 22 href3=[]
  23. 23 href4=[]
  24. 24 href5=[]
  25. 25 href6=[]
  26. 26 text=[]
  27. 27 text3=[]
  28. 28 text5=[]
  29. 29
  30. 30 href1=chrome.find_elements_by_css_selector('.provincetr td a')[30:]
  31. 31 # 省份和其对于的下一级链接
  32. 32 for q in href1:
  33. 33 href.append(q.get_attribute('href'))
  34. 34 text.append(q.get_attribute('innerHTML'))
  35. 35 for h,t in zip(href,text):
  36. 36 # if t.find("上海市")<0:
  37. 37 # continue
  38. 38 if h=='':continue
  39. 39 chrome.get(h)
  40. 40 time.sleep(3)
  41. 41 writeData(t)
  42. 42 href2=chrome.find_elements_by_css_selector(".citytr :nth-child(2) a")
  43. 43 #城市和其对应的下一级链接
  44. 44 timer=0
  45. 45 while timer<len(href2):
  46. 46 q1=chrome.find_elements_by_css_selector(".citytr :nth-child(2) a")[timer]
  47. 47 timer+=1
  48. 48 href3=q1.get_attribute('href')
  49. 49 text3=q1.get_attribute('innerHTML')
  50. 50 if href3=='':continue
  51. 51 chrome.get(href3)
  52. 52 time.sleep(3)
  53. 53 href4=chrome.find_elements_by_css_selector(".countytr :nth-child(2) a")
  54. 54 #区和其对应的下一级链接
  55. 55 timer7=0
  56. 56 while timer7<len(href4):
  57. 57 print timer7
  58. 58 print len(href4)
  59. 59 q2=chrome.find_elements_by_css_selector(".countytr :nth-child(2) a")[timer7]
  60. 60 timer7+=1
  61. 61 href5=q2.get_attribute('href')
  62. 62 text5=q2.get_attribute('innerHTML')
  63. 63 if href5=='':continue
  64. 64 chrome.get(href5)
  65. 65 time.sleep(3)
  66. 66 href6=chrome.find_elements_by_css_selector(".towntr :nth-child(2) a")
  67. 67 #街道信息
  68. 68 timer6=0
  69. 69 while timer6<len(href6):
  70. 70 q3=chrome.find_elements_by_css_selector(".towntr :nth-child(2) a")[timer6]
  71. 71 timer6+=1
  72. 72 writeData(t+" "+text3+" "+text5+" "+q3.get_attribute('innerHTML')+"\n")
  73. 73 chrome.back()
  74. 74 chrome.back()
  75. 75 chrome.back()
  76. 76

下面说说我遇到的主要问题,记录下来,免得下次又踩坑。

1.用for in循环遍历,报错:element is not attached to the page document,发现是chrome.get打开另一个页面之后,再回来就会报这边错误,原来是页面刷新之后,需要重新获取一下元素,一开始我是用了3个for in 遍历的,发现不行,就改为了while,在while重新获取一次元素,获取元素依次增一。

2.爬到的数据有缺失,发现是变量timer,timer7,timer6,在每个while循环前,需要复位为0。

3.大概爬到三分一的时候,需要填入图片中的数字才可以继续打开页面,页面做了反爬,很多网站都会有所限制,接下来的爬取,很多时候需要人工干预,改变爬取的起点,让程序继续爬取剩下的数据

4,。我用的是txt保存爬到的数据,我一开始是打算用excel的,但是安装xlwt失败,报编码问题,安装包的时候,经常遇到这个问题,也不知道怎么搞

爬完之后,得到的文件有2M多,的确是蛮大的。有5万多行呢。

python2爬取国家统计局全国省份城市区街道信息的更多相关文章

  1. 使用java爬取国家统计局的12位行政区划代码

    前言: 本文基于j2ee的原始url进行都写,解析指定内容时也是使用很傻的形式去查找指定格式的字符串来实现的. 更优雅的方式是可以使用apache的HttpClient和某些文档模型将HTML字符串构 ...

  2. Python 2.7 爬取51job 全国java岗位

      一页有50条数据一共2000页 分页是get分页 #!/usr/bin/python # encoding: utf-8 import requests import threading from ...

  3. 使用requests+pyquery爬取dd373地下城跨五最新商品信息

    废话不多说直接上代码: 可以使用openpyel库对爬取的信息写入Execl表格中代码我就不上传了 import requests from urllib.parse import urlencode ...

  4. 网络爬虫之scrapy爬取某招聘网手机APP发布信息

    1 引言 过段时间要开始找新工作了,爬取一些岗位信息来分析一下吧.目前主流的招聘网站包括前程无忧.智联.BOSS直聘.拉勾等等.有段时间时间没爬取手机APP了,这次写一个爬虫爬取前程无忧手机APP岗位 ...

  5. 利用Python爬虫爬取指定天猫店铺全店商品信息

    本编博客是关于爬取天猫店铺中指定店铺的所有商品基础信息的爬虫,爬虫运行只需要输入相应店铺的域名名称即可,信息将以csv表格的形式保存,可以单店爬取也可以增加一个循环进行同时爬取. 源码展示 首先还是完 ...

  6. Python爬取前程无忧网站上python的招聘信息

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 我姓刘却留不住你的心 PS:如有需要Python学习资料的小伙伴可以 ...

  7. 爬取前程无忧网站上python的招聘信息。

    本文获取的字段有为职位名称,公司名称,公司地点,薪资,发布时间 创建爬虫项目 scrapy startproject qianchengwuyou cd qianchengwuyou scrapy g ...

  8. Python爬取网址中多个页面的信息

    通过上一篇博客了解到爬取数据的操作,但对于存在多个页面的网址来说,使用上一篇博客中的代码爬取下来的资料并不完整.接下来就是讲解该如何爬取之后的页面信息. 一.审查元素 鼠标移至页码处右键,选择检查元素 ...

  9. 他爬取了B站所有番剧信息,发现了这些……

    本文来自「楼+ 之数据分析与挖掘实战 」第 4 期学员 -- Yueyec 的作业.他爬取了B站上所有的番剧信息,发现了很多有趣的数据- 关键信息:最高播放量 / 最强up主 / 用户追番数据 / 云 ...

随机推荐

  1. PAUL ADAMS ARCHITECT:爱丁堡的房屋价值创历史新高

    近日,英国知名房产公司保罗·亚当斯公司根据一组调查报告表示,今年第三季度,爱丁堡的房价再创历史新高,并向大家分析了原因. 保罗·亚当斯公司(公司编号:07635831)是英国一家著名的房地产公司,总部 ...

  2. HQYJ嵌入式学习笔记——C语言复习day2

    1.计算机的数值表示 数值类型和非数值类型 二进制 0,1 (0b1001) 八进制 0~7   (0146) 十进制 0~9 十六进制 0~f (0x3f) 八进制转二进制-->一位八进制数换 ...

  3. ATP - UI 自动化测试用例管理平台搭建

    用到的工具:python3 + django2 + mysql + RabbitMQ + celery + selenium python3和selenium这个网上很多教程,我不在这一一说明:   ...

  4. Linux 网络分析必备技能:tcpdump 实战详解

    大家好,我是肖邦,这是我的第 11 篇原创文章. 今天要分享的是 tcpdump,它是 Linux 系统中特别有用的网络工具,通常用于故障诊断.网络分析,功能非常的强大. 相对于其它 Linux 工具 ...

  5. 手把手教你Spring Boot整合Mybatis Plus 代码生成器

    一.在pom.xml中添加所需依赖 <!-- MyBatis-Plus代码生成器--> <dependency> <groupId>com.baomidou< ...

  6. Mybites逆向工程的搭建

    这个链接写的很全:https://www.cnblogs.com/whgk/p/7140638.html 这段时间太忙,等周末写上自己尝试的步骤.暂时仅作记录.

  7. .NET gRPC 核心功能初体验,附Demo源码

    gRPC是高性能的RPC框架, 有效地用于服务通信(不管是数据中心内部还是跨数据中心). 由Google开源,目前是一个Cloud Native Computing Foundation(CNCF)孵 ...

  8. Java基本概念:异常

    一.简介 描述: 异常(Exception)指不期而至的各种状况,异常发生的原因有很多,通常包含以下几大类: 用户输入了非法数据. 要打开的文件不存在. 网络通信时连接中断,或者JVM内存溢出. 异常 ...

  9. C++入门(1):计算机组成

    系列文章尽在 | 公众号:lunvey 学习C++之前,我们有必要了解一下计算机的简单组成,毕竟C++是需要操作内存的一门语言.大家或许知道内存是什么,但是内存怎么读取和操作数据以及数据的表现形式会不 ...

  10. 检查字符串是否包含另一串字符串(c++)

    在c++中检查字符串是否包含另一串字符串,这个本来是我做过的一个算法题,不过最近刚好有个需求让我想到了这个题,就在此记录一下! 使用std::string::findfunction string s ...