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 time模块用法实例详解
Sep 11 Python
python实现list元素按关键字相加减的方法示例
Jun 09 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
Jul 24 Python
微信跳一跳python自动代码解读1.0
Jan 12 Python
python3 图片referer防盗链的实现方法
Mar 12 Python
Python使用post及get方式提交数据的实例
Jan 24 Python
Python常用特殊方法实例总结
Mar 22 Python
Python 获取 datax 执行结果保存到数据库的方法
Jul 11 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
关于多元线性回归分析——Python&amp;SPSS
Feb 24 Python
在spyder IPython console中,运行代码加入参数的实例
Apr 20 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 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
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
php简单的会话类代码
2011/08/08 PHP
PHP数组及条件,循环语句学习
2012/11/11 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
2014/07/28 PHP
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
python科学计算之numpy——ufunc函数用法
2019/11/25 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
2020/08/17 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
CSS3实现swap交换动画
2016/01/19 HTML / CSS
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
体育专业个人的求职信范文
2013/09/21 职场文书
司机工作自我鉴定
2014/09/19 职场文书
实训报告范文大全
2014/11/04 职场文书
个性发展自我评价2015
2015/03/09 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python
php解析非标准json、非规范json的方式实例
2022/05/10 PHP