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学习笔记:字典的使用示例详解
Jun 13 Python
Python字符串中查找子串小技巧
Apr 10 Python
python获取指定路径下所有指定后缀文件的方法
May 26 Python
Python中在脚本中引用其他文件函数的实现方法
Jun 23 Python
深入理解Python中的*重复运算符
Oct 28 Python
python实现栅栏加解密 支持密钥加密
Mar 20 Python
python SVM 线性分类模型的实现
Jul 19 Python
pygame实现俄罗斯方块游戏(对战篇1)
Oct 29 Python
wxpython+pymysql实现用户登陆功能
Nov 19 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
Jul 14 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
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
PHP中ob_start函数的使用说明
2013/11/11 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
2014/02/13 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
锋利的jQuery 第三章章节总结的例子
2010/03/23 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
解决JQuery全选/反选第二次失效的问题
2017/10/11 jQuery
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
浅析vue深复制
2018/01/29 Javascript
利用npm 安装删除模块的方法
2018/05/15 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
Node.js系列之发起get/post请求(2)
2019/08/30 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
python字符串连接的N种方式总结
2014/09/17 Python
使用python实现rsa算法代码
2016/02/17 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
python实现文法左递归的消除方法
2020/05/22 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
Python接收手机短信的代码整理
2020/08/02 Python
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
编辑求职信样本
2013/12/16 职场文书
医药代表个人求职信范本
2013/12/19 职场文书
个人委托书
2014/07/31 职场文书
青岛海底世界导游词
2015/02/11 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
比赛主持人开场白
2015/05/29 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js