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 相关文章推荐
Django框架下在视图中使用模版的方法
Jul 16 Python
用Python的Flask框架结合MySQL写一个内存监控程序
Nov 07 Python
Python 功能和特点(新手必学)
Dec 30 Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 Python
python获取中文字符串长度的方法
Nov 14 Python
python绘制简单彩虹图
Nov 19 Python
Django ManyToManyField 跨越中间表查询的方法
Dec 18 Python
Python计算不规则图形面积算法实现解析
Nov 22 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
Dec 12 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
Python根据指定文件生成XML的方法
Jun 29 Python
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
May 28 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
用PHP ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
php中rename函数用法分析
2014/11/15 PHP
php数组键值用法实例分析
2015/02/27 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
关于IFRAME 自适应高度的研究
2006/07/20 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
jQuery实现的简单在线计算器功能
2017/05/11 jQuery
简单实现JavaScript弹幕效果
2020/08/27 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
判断网页编码的方法python版
2016/08/12 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
利用python开发app实战的方法
2019/07/09 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
Python socket聊天脚本代码实例
2020/01/02 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
办公室驾驶员岗位职责
2013/11/15 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
银行求职信范文
2014/05/26 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
2016国培学习心得体会
2016/01/08 职场文书
自考生自我评价
2019/06/21 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android