安装Scrapy框架
pip install scrapy
Scrapy命令
scrapy startproject 项目名称 #创建scrapy项目文件夹
cd 项目名称 #进入项目文件夹
scrapy genspider 爬虫名称 允许爬取的域名 # 创建爬虫文件
例如
scrapy startproject doubantop250 #创建名为doubantop250的项目文件夹
cd doubantop250 #进入doubantop250文件夹
scrapy genspider douban movie.douban.com/top250 #规定爬虫名称和允许爬取的域名
完成后打开如下
:
爬虫代码及有关设置
打开settings.py
修改以下设置
# 第十七行
USER_AGENT = '自己电脑中user-agent的数值'
# 第二十行
ROBOTSTXT_OBEY = False
打开douban.py
导入所需要的库
import scrapy #创建scrapy时自动导入的库
from scrapy import Selector # 导入css选择器模块
from doubanmovietop250.items import Doubanmovietop250Item #导入文件夹中的item文件便于存储指定数据
from scrapy.http import HtmlResponse #导入HtmlResponse模块便于构造css选择器对象
from scrapy import Request #导入request模块用于获取网页源码
注意:start_urls 里面的内容要改为[‘http://movie.douban.com/top250’]
获取网页源码
import scrapy
from scrapy import Selector
from doubanmovietop250.items import Doubanmovietop250Item
from scrapy.http import HtmlResponse
from scrapy import Request
class DoubanSpider(scrapy.Spider):
name = 'douban'
allowed_domains = ['movie.douban.com']
start_urls = ['http://movie.douban.com/top250'] #修改之后的开始网址
def parse(self, response):
print(response.text) #将pass删除,response.text为获取网页源码
源码提取信息并传入item文件内
import scrapy
from scrapy import Selector
from doubanmovietop250.items import Doubanmovietop250Item
from scrapy.http import HtmlResponse
from scrapy import Request
class DoubanSpider(scrapy.Spider):
name = 'douban'
allowed_domains = ['movie.douban.com']
#以下第一个函数为重写start_requests意为爬取全部的250条电影数据
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, **kwargs):
sel = Selector(response) #构造选择器对象
list_items = sel.css('#content > div > div.article > ol > li') #确定每一个页面电影的数据列表
for list_item in list_items:
movie_item = Doubanmovietop250Item()
movie_item['title'] = list_item.css('span.title::text').extract_first() #电影名称
movie_item['rank'] = list_item.css('span.rating_num::text').extract_first()#电影评分
movie_item['subject'] = list_item.css('span.inq::text').extract_first() #电影简介
yield movie_item #生成器将数据传给items.py
print(movie_item['title'])
items.py文件修改
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html
import scrapy
class Doubanmovietop250Item(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field() # 标题字段
rank = scrapy.Field() # 评分字段
subject = scrapy.Field() # 主题字段
存储
**如果保存为csv文件:**scrapy crawl douban -o douban.csv