Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
1.下载安装
我使用的是Anaconda3,相应的python版本是3.7
pip install scarpy
2.简单案例
抓取美剧天堂的前100最新,如下图所示:
步骤:
(1)cmd进入需要创建项目的文件夹
cd E://ScrapyTest
(2)创建工程
scrapy startproject movie
(3)创建爬虫程序
cd movie // 进入工程目录
scrapy genspider meiju meijutt.com //创建爬虫程序
执行代码,系统会自动创建文件目录和文件,如下图所示:
文件说明:
- scrapy.cfg 项目的配置信息,主要为Scrapy命令行工具提供一个基础的配置信息。(真正爬虫相关的配置信息在settings.py文件中)
- items.py 设置数据存储模板,用于结构化数据,如:Django的Model
- pipelines 数据处理行为,如:一般结构化的数据持久化
- settings.py 配置文件,如:递归的层数、并发数,延迟下载等
- spiders 爬虫目录,如:创建文件,编写爬虫规则
注意:一般创建爬虫文件时,以网站域名命名
(4)设置数据模板(每条数据格式)
#items.py
import scrapy
class MovieItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field()
(5)爬虫主类
#meiju.py
# -*- coding: utf-8 -*-
import scrapy
from movie.items import MovieItem
class MeijuSpider(scrapy.Spider):
name = 'meiju'
allowed_domains = ['meijutt.com']
start_urls = ['http://www.meijutt.com/new100.html']
def parse(self, response):
movies = response.xpath('//ul[@class="top-list fn-clear"]/li')
for each_movie in movies:
item = MovieItem()
item['name'] = each_movie.xpath('./h5/a/@title').extract()[0]
yield item
(6)设置配置文件
#settings.py
添加内容
ITEM_PIPELINES = {'movie.pipelines.MoviePipeline':100}
(7)抓取后数据处理程序
#pipelines.py
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
class MoviePipeline(object):
def process_item(self, item, spider):
with open("E://my_meiju.txt",'a') as fp:
print(type(item['name']))
fp.write(item['name'] + "\n")
(8)执行爬虫程序
cd movie
scrapy crawl meiju
参考博客:https://www.cnblogs.com/kongzhagen/p/6549053.html,出错部分已进行修改