1Scrapy简介
五大核心组件:
引擎(Scrapy) 用来处理整个系统的数据流的流动。
调度器(Scheduler) 用来接受引擎发过来的请求,并按照一定的方式进行整理排列,放到队列中,当引擎需要时,交还给引擎。
下载器(Downloader)负责下载引擎发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理。
爬虫(Spiders)用户根据自己的需求,编写程序,用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。
项目管道(Pipeline)负责处理爬虫提取出来的item,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。
2 安装Scrapy
输入命令:pip install scrapy
安装成功后,Scripts目录会多了一个scrapy.exe可执行文件。
3 Scrapy的简单使用
第1步创建工程。
输入命令:scrapy startproject getWeather
工程的目录结构如下:
scrapy.cfg: 项目的配置文件
getWeather /: 该项目的python模块。之后您将在此加入代码。
getWeather /items.py: 项目中的item文件.
getWeather /pipelines.py: 项目中的pipelines文件.
getWeather /settings.py: 项目的设置文件.
getWeather /spiders/: 放置spider代码的目录.
第2步,修改配置文件getWeatherSpider
```python
1 #伪装请求载体身份
2 USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
3
4 #可以忽略或者不遵守robots协议
5 ROBOTSTXT_OBEY = False
第3步,创建爬虫文件getWeatherSpider
输入命令: scrapy genspider weatherSpider www.weather.com.cn
会产生weatherSpider.py,代码如下:
# -*- coding: utf-8 -*-
import scrapy
class weatherSpider(scrapy.Spider):
name = 'weather'
allowed_domains = ['www.weather.com.cn']
start_urls = ['http://www.weather.com.cn/']
def parse(self, response):
pass
allowed_domains:域名
start_urls:爬取的页面
def parse:解析方法
定义天气预报数据模型:
class WeatherItem(scrapy.Item):
date = scrapy.Field() # 日期
wea = scrapy.Field() # 天气
tem_max = scrapy.Field() # 最高温度
tem_min = scrapy.Field() # 最低温度
wind_direction = scrapy.Field() # 风向
wind_level = scrapy.Field() # 风力
定义解析的具体逻辑:
```python
weathers = bsoup.find_all('li', class_='sky skyid lv1 on')
# `获取日期`
date = weather.find('h1').text
print("日期:", end=" ")
print(date)
# 获取天气
wea = weather.find('p', class_='wea').text
print("天气:", end=" ")
print(wea)
第4步,运行爬虫
输入命令:scrapy crawl weatherSpider
或scrapy crawl weatherSpider -o weather.csv
可以看到爬取结果:
此时,就爬取成功了,在目录下生成了weather.csv文件.
代码详见:https://github.com/alifeidao/python-spider-simple getWeather工程。
4 scrapy-redis
使用scrapy-redis搭建分布式爬虫环境,以后有时间再补充哈!!!