课程笔记7:Scrapy框架——规则化爬虫

搭建一个基础爬虫

1.新建项目:

scrapy startproject scrapyuniversaldemo

2.查看可用模版并指定crawl模版创建爬虫

scrapy genspider -l
# 查看模版非必要
scrapy genspider -t crawl movie ssr1.scrape.center

3.在爬虫的rules中使用Rule来定义index页中的爬取逻辑和解析逻辑

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from ..items import MovieItem


class MoiveSpider(CrawlSpider):
    name = 'movie'
    allowed_domains = ['ssr1.scrape.center']
    start_urls = ['http://ssr1.scrape.center/']

    rules = (
        Rule(LinkExtractor(restrict_css='.item .name'), callback='parse_detail', follow=True),
        Rule(LinkExtractor(restrict_css='.next'), follow=True)
    )

这里用到了Rule的三个参数:link_extractor、callback、follow

  • link_extractor:一个LinkExtractor对象,指向需要提取的链接,提取出的链接会自动生成Request;
  • callback:指向负责处理response的方法,该方法会返回包含Item或Request对象的列表(不要使用parse方法);
  • follow: 一个布尔值,指定从response提取的链接是否需要跟进爬取(即进一步生成Request),如果不跟进,一般可以定义回调方法解析内容,生成Item。

在LinkExtractor中用到了一个参数:restrict_css

  • restrict_css:表示从当前页面中与CSS选择器匹配的区域提取链接
  • restrict_xpath:表示从当前页面中与XPath匹配的区域提取链接
  • tags:指定从某个节点中提取链接,默认是('a','area')
  • attrs:指定从节点的某个属性中提取链接,默认是('href',),搭配tags使用
  • unique:是否需要对提取到的链接进行去重,默认是True
  • strip:是否需要对提取到的结果进行去掉首尾空格的处理,默认是True
  • allow:一个正则表达式(或列表),规定提取链接的白名单
  • deny:一个正则表达式(或列表),规定提取链接的黑名单
  • allow_domains:定义域名白名单
  • deny_domains:定义域名黑名单
  • deny_extensions:定义链接后缀黑名单(默认值包括7z、7zip、apk、dmg、ico、iso、tar等)

4.在爬虫中创建parse_detail方法,定义detail页中的爬取逻辑

-省略-


class MoiveSpider(CrawlSpider):
    -省略-

    def parse_detail(self, response):
        item = MovieItem()
        item['name'] = response.css('.item h2::text').get()
        item['categories'] = response.css('.categories .category span::text').getall()
        item['cover'] = response.css('.cover::attr(src)').get()
        item['published_at'] = response.css('.info span::text').re_first('(\d{4}-\d{2}-\d{2})\s?上映')
        item['score'] = response.css('.score::text').get().strip()
        item['drama'] = response.css('.drama p::text').get().strip()
        yield item

5.在items中定义MovieItem并指定好需要的字段

import scrapy


class MovieItem(scrapy.Item):
    name = scrapy.Field
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值