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 13 Python
Python实现3行代码解简单的一元一次方程
Aug 18 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
简单谈谈python中的语句和语法
Aug 10 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
python五子棋游戏的设计与实现
Jun 18 Python
Django使用Jinja2模板引擎的示例代码
Aug 09 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 Python
Python configparser模块操作代码实例
Jun 08 Python
Python结合百度语音识别实现实时翻译软件的实现
Jan 18 Python
解决pytorch 模型复制的一些问题
Mar 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
PHP4在Windows2000下的安装
2006/10/09 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
javascript制作坦克大战全纪录(2)
2014/11/27 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
Python psutil模块简单使用实例
2015/04/28 Python
Python切片知识解析
2016/03/06 Python
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
Django之Mode的外键自关联和引用未定义的Model方法
2018/12/15 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
深圳茁壮笔试题
2015/05/28 面试题
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
三好学生评语大全
2014/12/29 职场文书
推广普通话的宣传语
2015/07/13 职场文书
安全教育主题班会教案
2015/08/12 职场文书
干部外出学习心得体会
2016/01/18 职场文书
python munch库的使用解析
2021/05/25 Python
TypeScript 内置高级类型编程示例
2022/09/23 Javascript