博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬虫脚本
阅读量:7281 次
发布时间:2019-06-30

本文共 2207 字,大约阅读时间需要 7 分钟。

 

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

---------------------

作者:只是个宝宝
来源:CSDN
原文:https://blog.csdn.net/qq_27974479/article/details/85634360
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/wang-sai-sai/p/10233641.html

你可能感兴趣的文章
SQL Server性能优化(9)聚集索引的存储结构
查看>>
五款MySQL常用的图形化管理工具
查看>>
一些nginx配置
查看>>
关于虚连接的一些细节
查看>>
求一个整数任意次方的后三位数
查看>>
数组 多维数组
查看>>
提高HTML5 Canvas性能的技巧
查看>>
【Android UI】中间对齐UI组件
查看>>
Copy, cut and paste
查看>>
awk命令使用方法
查看>>
[半小时] 浅析OSI七层参考模型+TCP/IP网络模型
查看>>
tune2fs命令详解
查看>>
理解Kubernetes核心概念
查看>>
Linux下Mysql的安装
查看>>
芝加哥高校花巨款购入600台MBA
查看>>
VMware推动异构云落地
查看>>
删除表A的记录时,Oracle 报错:“ORA-02292:违反完整约束条件(XXX.FKXXX)- 已找到子记录...
查看>>
Java常用接口:Comparable接口的实现与使用
查看>>
ubuntu下memcached启动停止脚本
查看>>
敏捷开发产品管理系列之二:产品版本规划
查看>>