Python3爬虫全国地址信息


Posted in Python onJanuary 05, 2019

PHP方式写的一团糟所以就用python3重写了一遍,所以因为第二次写了,思路也更清晰了些。

提醒:可能会有502的错误,所以做了异常以及数据库事务处理,暂时没有想到更好的优化方法,所以就先这样吧。待更懂python再进一步优化哈

欢迎留言赐教~

#!C:\Users\12550\AppData\Local\Programs\Python\Python37\python.exe
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
import pymysql
import urllib.request
import re
from urllib.error import URLError, HTTPError
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='test', charset='utf8')
db = conn.cursor()
curr_url = ''
# 请求网页
def get_html(url):
  global curr_url
  user_agent = 'Mozilla/6.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.6796.99 Safari/537.36'
  response = urllib.request.Request(url)
  response.add_header('User-Agent', user_agent)
  response = urllib.request.urlopen(response)
  html = BeautifulSoup(response.read(), "html.parser", from_encoding='gbk')
  return html
def get_list(url, level=1, pid=0, get_level=2):
  data = [];
  level_arr = {'1': 'provincetr', '2': 'citytr', '3': 'countytr', '4': 'towntr', '5': 'villagetr'}
  try:
    print(url)
    html = get_html(url)
    c_url = url
    tr_list = html.findAll('tr', {'class': level_arr[str(level)]})
    for tr in tr_list:
      region_name, href, page = '', '', ''
      td_list = tr.findAll('td')
      for td in td_list:
        region_name = td.get_text();
        # 判断是否存在该省份
        if (level == 1):
          sql = "select * from region where region_name='" + region_name + "'"
          db.execute(sql)
          exist = db.fetchone()
          if(exist):
            continue
        # 判断是否全数字-非法则跳过
        if (region_name.isdigit()):
          continue
        if (region_name):
          sql = "insert into region(region_name,pid,level,url) value('" + region_name + "','" + str(
            pid) + "','" + str(level) + "','" + url + "')"
          db.execute(sql)
          db.execute('SELECT LAST_INSERT_ID();')
          last_id = db.fetchone()[0]
        if (td.a):
          page = td.a.attrs['href']
          pattern = re.compile(r'\w*.html')
          url = re.sub(pattern, page, c_url)
          if (level <= get_level):
            get_list(url, level + 1, last_id)
      # 每个省份执行完成,则提交
      if (level == 1):
        conn.commit()
    return data;
  except HTTPError as e:
    # 如果有出错,则回滚
    conn.rollback()
    print(e) # HTTP Error 502: Proxy Error
url = 'http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2017/index.html'
get_list(url)
print('执行完成')

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
python多线程threading.Lock锁用法实例
Nov 01 Python
Python简单实现TCP包发送十六进制数据的方法
Apr 16 Python
python cx_Oracle的基础使用方法(连接和增删改查)
Nov 19 Python
详解Python在七牛云平台的应用(一)
Dec 05 Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
利用python实现PSO算法优化二元函数
Nov 13 Python
python实现FTP文件传输的方法(服务器端和客户端)
Mar 20 Python
Python定义函数实现累计求和操作
May 03 Python
Python xlrd模块导入过程及常用操作
Jun 10 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 Python
基于Python+QT的gui程序开发实现
Jul 03 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
Jan 04 #Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
Jan 04 #Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
Jan 04 #Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 #Python
django主动抛出403异常的方法详解
Jan 04 #Python
pyspark操作MongoDB的方法步骤
Jan 04 #Python
详解Appium+Python之生成html测试报告
Jan 04 #Python
You might like
基于initPHP的框架介绍
2013/04/18 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
2019/09/23 PHP
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
详解vue-cli中配置sass
2017/06/21 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
Swift中的协议(protocol)学习教程
2016/07/08 Python
python中字符串内置函数的用法总结
2018/09/13 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
matlab、python中矩阵的互相导入导出方式
2020/06/01 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
Django多数据库联用实现方法解析
2020/11/12 Python
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
留学自荐信
2013/10/10 职场文书
饮料业务员岗位职责
2013/12/15 职场文书
军训考核自我鉴定
2014/02/13 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
成本会计岗位职责
2015/02/03 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
教师节作文之小学四年级
2019/09/03 职场文书