Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
1.首先安装Scrapy
win+r 输入cmd打开控制栏 pip install scrapy 安装
2.安装完成后,命令提示符中输入 scrapy
可以使用startproject 命令创造一个新项目
3.在对应想放置文件夹的地方再次打开命令提示符,创造新项目 scrapy startproject+项目名字
这里我创建了testspider 项目,项目里面的spider文件夹即使爬虫代码放置的地方
4.创建爬虫程序,cd到新创建的项目下打开命令提示符,使用
scrapy genspider+爬虫名字+目标网址。(要用此方式创造爬虫项目,否则运行时无crawl方法)
这里我
5.整个项目文件用pycharm打开,在设置中创造虚拟环境,同时再pycharm中的虚拟环境再次
pip install scrapy 安装scrapy,这一次安装是为了使用scrapy中的包
6.项目实现。在spider中打开第四步创建的爬虫文件。
start_urls是起始页面
打开起始页面,也是目标页面,f12打开开发者模式,这里检查找到电影标题对应的标签
右键复制selector ,这里是为了拿到文章标题的标签,同理再拿到评分和类型的标签
7.转到左侧的items文件中,这里创造一个对象用来接收爬取到的数据,然后再爬虫程序中导入这个对象。
class MovieItem(scrapy.Item): #将数据组装成一个item对象,定义类(代表一个电影的数据)
title = scrapy.Field()
rank = scrapy.Field()
subject = scrapy.Field()
8.转到左侧的setting文件中,这里改用延迟和增加随机延迟,防止被反爬
DOWNLOAD_DELAY = 3 #延迟
RANDOMIZE_DOWNLOAD_DELAY = True #随机延迟
9.爬虫部分代码
import scrapy
from scrapy import Selector,Request
from scrapy.http import HtmlResponse
from testspider.items import MovieItem
class Test1Spider(scrapy.Spider):
name = "test1"
allowed_domains = ["movie.douban.com"]
def start_requests(self):
for page in range(10):
yield Request(url=f'https://movie.douban.com/top250?start={page * 25}&filter=')
def parse(self, response: HtmlResponse): # 拿到相应后的解析程序
sel = Selector(response)
list_ltem = sel.css("#content > div > div.article > ol > li")
for i in list_ltem:
movie_item = MovieItem()
movie_item['title'] = i.css('span.title::text').extract_first() # 使用css解析
movie_item['rank'] = i.css('span.rating_num::text').extract_first()
movie_item['subject'] = i.css('span.inq::text').extract_first()
yield movie_item # 生成器返回数据
10.程序运行
在项目文件夹内执行命令(有scrapy.cfg所在的文件夹),
终端页面中输入 scrapy crawl+爬虫项目的名字+ -o +保存文件的名字和类型
我这里保存为douban.csv文件
11.查看运行结果