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爬虫教程之爬取百度贴吧并下载的示例
Mar 07 Python
利用Django框架中select_related和prefetch_related函数对数据库查询优化
Apr 01 Python
python中abs&amp;map&amp;reduce简介
Feb 20 Python
TensorFLow用Saver保存和恢复变量
Mar 10 Python
利用Python实现原创工具的Logo与Help
Dec 03 Python
Python 数据库操作 SQLAlchemy的示例代码
Feb 18 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
PyQt5笔记之弹出窗口大全
Jun 20 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
pytorch交叉熵损失函数的weight参数的使用
May 24 Python
python开发制作好看的时钟效果
May 02 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字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
php文件服务实现虚拟挂载其他目录示例
2014/04/17 PHP
php自定义session示例分享
2014/04/22 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
两种php实现图片上传的方法
2016/01/22 PHP
Avengerls vs Newbee BO3 第一场2.18
2021/03/10 DOTA
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
2014/04/15 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
js密码强度校验
2015/11/10 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
vue中用H5实现文件上传的方法实例代码
2017/05/27 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
python将数组n等分的实例
2019/12/02 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
Canvas实现放大镜效果完整案例分析(附代码)
2020/11/26 HTML / CSS
一套带网友答案的.NET笔试题
2016/12/06 面试题
教师师德演讲稿
2014/05/06 职场文书
公安领导班子四风问题个人整改措施思想汇报
2014/10/09 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
品德与社会教学反思
2016/02/24 职场文书
Python基础知识之变量的详解
2021/04/14 Python
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python