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 01 Python
Python实现登录人人网并抓取新鲜事的方法
May 11 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 Python
python列表的常用操作方法小结
May 21 Python
Python实现类的创建与使用方法示例
Jul 25 Python
python 删除列表里所有空格项的方法总结
Apr 18 Python
pycharm配置git(图文教程)
Aug 16 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 Python
Python爬虫与反爬虫大战
Jul 30 Python
python3 hdf5文件 遍历代码
May 19 Python
pytorch--之halfTensor的使用详解
May 24 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 htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
PHP分享图片的生成方法
2018/04/25 PHP
thinkPHP5框架导出Excel文件简单操作示例
2018/08/03 PHP
双击滚屏-常用推荐
2006/11/29 Javascript
详细讲解JS节点知识
2010/01/31 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
python调用外部程序的实操步骤
2019/03/04 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
澳洲的服装老品牌:SABA
2018/02/06 全球购物
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
幼儿园教师工作制度
2014/01/22 职场文书
《雨点》教学反思
2014/02/12 职场文书
高中生操行评语大全
2014/04/25 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
考研英语辞职信
2015/05/13 职场文书
员工聘用合同范本
2015/09/21 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
Pytest中conftest.py的用法
2021/06/27 Python
MySQL多表查询机制
2022/03/17 MySQL