资源简介
python3实现爬取中国天气网天气并写入csv,若有疑问可参照对应博客或询问

代码片段和文件信息
import re
from urllib.parse import urlparseurljoinurlsplit
import urllib.request
import time
from datetime import datetime
import urllib.robotparser
import queue
def link_crawler(seed_url link_regex=None delay=5 max_depth=-1 max_urls=-1 headers=None user_agent=‘wswp‘ proxy=None num_retries=1 scrape_callback=None):
“““
在link_regex匹配的链接之后从给定的种子URL抓取
“““
# 仍需要抓取的URL队列
crawl_queue = [seed_url]
# 已经看到深度的URL
seen = {seed_url: 0}
# 追踪有多少URL被下载过
num_urls = 0
rp = get_robots(seed_url)
throttle = Throttle(delay)
headers = headers or {}
if user_agent:
headers[‘User-agent‘] = user_agent
while crawl_queue:
url = crawl_queue.pop()
depth = seen[url]
# 检查url传递的robots.txt限制
if rp.can_fetch(user_agent url):
throttle.wait(url)
html = download(url headers proxy=proxy num_retries=num_retries)
links = []
if scrape_callback:
links.extend(scrape_callback(url html) or [])
#未达到最大深度,仍可以进一步爬取
if depth != max_depth:
if link_regex:
# 筛选符合正则表达式的链接
links.extend(link for link in get_links(html) if re.match(link_regex link))
for link in links:
link = normalize(seed_url link)
# 检查是否已抓取此链接
if link not in seen:
seen[link] = depth + 1
# 检查链接是否在同一个域内
if same_domain(seed_url link):
# 成功! 将此新链接添加到队列
crawl_queue.append(link)
# 检查是否已达到下载的最大值
num_urls += 1
if num_urls == max_urls:
break
else:
print (‘Blocked by robots.txt:‘ url)
#节流
class Throttle:
“““
通过在对同一域之间请求休眠来限制下载
“““
def __init__(self delay):
#每个域的下载之间的延迟量
self.delay = delay
# 上次访问域时的时间戳
self.domains = {}
def wait(self url):
“““
如果最近访问过这个域,则会延迟
“““
domain = urlsplit(url).netloc
last_accessed = self.domains.get(domain)
if self.delay > 0 and last_accessed is not None:
sleep_secs = self.delay - (datetime.now() - last_accessed).seconds
if sleep_secs > 0:
time.sleep(sleep_secs)
self.domains[domain] = datetime.now()
#下载网址
def download(url headers proxy num_retries data=None):
print (‘Downloading:‘ url)
request = urllib.request.Request(url data headers)
opener = urllib.request.build_opener()
if proxy:
proxy_params = {urlparse.urlparse(url).scheme: proxy}
opener.add_handler(urllib.request.ProxyHandler(proxy_params))
try:
response = opener.open(request)
html = response.read()
code = response.code
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5333 2018-11-09 20:23 weather_reptile\li
文件 1162 2018-11-09 20:23 weather_reptile\scrape_callback.py
目录 0 2018-11-11 19:44 weather_reptile
----------- --------- ---------- ----- ----
6495 3
- 上一篇:nulindai.py
- 下一篇:超限学习机—逻辑回归Python代码
相关资源
- 二级考试python试题12套(包括选择题和
- pywin32_python3.6_64位
- python+ selenium教程
- PycURL(Windows7/Win32)Python2.7安装包 P
- 英文原版-Scientific Computing with Python
- 7.图像风格迁移 基于深度学习 pyt
- 基于Python的学生管理系统
- A Byte of Python(简明Python教程)(第
- Python实例174946
- Python 人脸识别
- Python 人事管理系统
- 基于python-flask的个人博客系统
- 计算机视觉应用开发流程
- python 调用sftp断点续传文件
- python socket游戏
- 基于Python爬虫爬取天气预报信息
- python函数编程和讲解
- Python开发的个人博客
- 基于python的三层神经网络模型搭建
- python实现自动操作windows应用
- python人脸识别(opencv)
- python 绘图(方形、线条、圆形)
- python疫情卡UN管控
- python 连连看小游戏源码
- 基于PyQt5的视频播放器设计
- 一个简单的python爬虫
- csv文件行列转换python实现代码
- Python操作Mysql教程手册
- Python Machine Learning Case Studies
- python获取硬件信息
评论
共有 条评论