#!C:\Users\12550\AppData\Local\Programs\Python\Python37\python.exe
# -*- coding: utf-8 -*- from urllib.request import urlopenfrom bs4 import BeautifulSoupimport pymysqlimport urllib.requestimport refrom 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 = urltr_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()): continueif (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('执行完成')---------------------
作者:只是个宝宝 来源:CSDN 原文:https://blog.csdn.net/qq_27974479/article/details/85634360 版权声明:本文为博主原创文章,转载请附上博文链接!