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通过smpt发送邮件的方法
Apr 30 Python
python 默认参数问题的陷阱
Feb 29 Python
Python numpy生成矩阵、串联矩阵代码分享
Dec 04 Python
使用Python+Splinter自动刷新抢12306火车票
Jan 03 Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 Python
python3实现多线程聊天室
Dec 12 Python
Python查找文件中包含中文的行方法
Dec 19 Python
python异常处理try except过程解析
Feb 03 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
Python操作MongoDb数据库流程详解
Mar 05 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 Python
python文件排序的方法总结
Sep 13 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 checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
PHP中shuffle数组值随便排序函数用法
2014/11/21 PHP
10款实用的PHP开源工具
2015/10/23 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
PHP实现活动人选抽奖功能
2017/04/19 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
JS加载解析Markdown文档过程详解
2020/05/19 Javascript
python命令行参数sys.argv使用示例
2014/01/28 Python
深入解析Python编程中super关键字的用法
2016/06/24 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
Python WEB应用部署的实现方法
2019/01/02 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
python如何修改文件时间属性
2021/02/05 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
聚美优品励志广告词
2014/03/14 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python