Scrapy简介
一个快速、高层次的屏幕抓取和web抓取的Python框架,用于抓取web站点并从页面中提取结构化的数据,可以用于数据挖掘、监测和自动化测试,可根据具体需求个性化定制。
Scrapy架构图:
各组件功能如下:
- Scrapy Engine(引擎):用来处理整个系统的数据传递,是整个系统的核心部分。
- Scheduler(调度器):用来接受引擎发过来的Request请求, 压入队列中, 并在引擎再次请求的时候返回。
- Downloader(下载器):用于引擎发过来的Request请求对应的网页内容, 并将获取到的Responses返回给Spider。
- Spiders(爬虫):对Responses进行处理,从中获取所需的字段(即Item),也可以从Responses获取所需的链接,让Scrapy继续爬取。
- Item Pipeline(管道):负责处理Spider中获取的实体,对数据进行清洗,保存所需的数据。
- Downloader Middlewares(下载器中间件):主要用于处理Scrapy引擎与下载器之间的请求及响应。
- Spider Middlewares(爬虫中间件):主要用于处理Spider的Responses和Requests。
爬取豆瓣电影排行榜Demo
scrapy环境搭建请自行搜索教程
创建工程结构
cmd中依次执行:
scrapy startproject doubanmovie
cd doubanmovie
scrapy genspider movie duoban.com
结构如下:
编写程序
修改setting.py文件
找到USER_AGENT字段,取消注释并修改为:
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
找到下面的代码取消注释
ITEM_PIPELINES = {
'doubanmovie.pipelines.DoubanmoviePipeline': 300,
}
编写Item.py
import scrapy
class DoubanmovieItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
name = scrapy.Field() # 电影名称
url = scrapy.Field() # 电影详情主页
rating = scrapy.Field() # 电影评分
编写movie.py
# -*- coding: utf-8 -*-
import scrapy
from doubanmovie.items import DoubanmovieItem
class MovieSpider(scrapy.Spider):
name = 'movie'
allowed_domains = ['douban.com']
start_urls = ['https://movie.douban.com/chart']
def parse(self, response):
movies = response.xpath('//tr[@class="item"]')
for movie_item in movies:
item = DoubanmovieItem()
item['name'] = movie_item.xpath('.//a[@class="nbg"]/img/@alt').extract_first()
item['url'] = movie_item.xpath('.//a/@href').extract_first()
item['rating'] = movie_item.xpath('.//span[@class="rating_nums"]/text()').extract_first()
yield item
编写pipelines.py
class DoubanmoviePipeline(object):
def process_item(self, item, spider):
str = item['name'] + '\t' + item['url'] + '\t' + item['rating']
print(str) # 这里只做简单的输出,也可将其存入文件或者数据库等
运行
在打开的cmd中执行
scrapy crawl movie --nolog
结果如下:
版权声明:未经许可,禁止转载
网友评论