温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用Python3爬取全国地址信息

发布时间:2021-06-16 17:02:22 来源:亿速云 阅读:276 作者:Leah 栏目:开发技术

这篇文章将为大家详细讲解有关如何使用Python3爬取全国地址信息,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

#!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('执行完成')

关于如何使用Python3爬取全国地址信息就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI