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 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
Python制作CSDN免积分下载器
Mar 10 Python
python实现telnet客户端的方法
Apr 15 Python
python中迭代器(iterator)用法实例分析
Apr 29 Python
python3解析库pyquery的深入讲解
Jun 26 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
Python中logging实例讲解
Jan 17 Python
详解python中list的使用
Mar 15 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
Python requests设置代理的方法步骤
Feb 23 Python
Python判断远程服务器上Excel文件是否被人打开的方法
Jul 13 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
Nov 17 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 手机归属地查询 api
2010/02/08 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
Dojo 学习笔记入门篇 First Dojo Example
2009/11/15 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
js实现拖拽功能
2017/03/01 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
vue-i18n结合Element-ui的配置方法
2019/05/20 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
微信小程序实现自定义底部导航
2020/11/18 Javascript
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
Python range与enumerate函数区别解析
2020/02/28 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
StubHub希腊:购买体育赛事、音乐会和剧院门票
2019/08/03 全球购物
中专生求职自荐信范文
2013/12/22 职场文书
2014新年寄语
2014/01/20 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
房地产广告策划方案
2014/05/15 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
班主任先进事迹材料
2014/12/17 职场文书
家属答谢词
2015/01/05 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL