Scrapy基本用法

栏目: Python · 发布时间: 5年前

内容简介:不同操作系统安装操作不同,可以直接看官方文档在命令行输入进入项目目录创建一个spider

安装scrapy

不同操作系统安装操作不同,可以直接看官方文档 Install Scrapy

创建一个项目

在命令行输入

scrapy startproject tutorial

进入项目目录创建一个spider

cd tutorial
scrapy genspider quotes domain.com
import scrapy

class QuotesSpider(scrapy.Spider):
    name = "quotes"

    def start_requests(self):
        urls = [
            'http://quotes.toscrape.com/page/1/',
            'http://quotes.toscrape.com/page/2/',
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = 'quotes-%s.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s' % filename)

运行scrapy,在项目顶级目录下输入命令

scrapy crawl quotes

在QuotesSpider这个类里,name指明spider的名称,在 start_requests 函数里发出请求,用 parse 函数处理请求返回的结果, start_requests 函数可以替换为 start_urls 列表,scrapy会自动帮我们发出请求,并默认用 parse 函数处理,还可以设置一些其它参数,详见 Document

选择器用法

scrapy内置css选择器和xpath选择器,当然你也可以选择使用其他的解析库,比如BeautifulSoup,我们简单用 scrapy shell 展示一下scrapy内置选择器的用法,在命令行中输入

scrapy shell https://docs.scrapy.org/en/latest/_static/selectors-sample1.html

示例代码

<html>
 <head>
  <base href='http://example.com/' />
  <title>Example website</title>
 </head>
 <body>
  <div id='images'>
   <a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
   <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
   <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
   <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
   <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
  </div>
 </body>
</html>
# 获取标题
# selector可以去掉
# extract返回的是列表
response.selector.xpath('//title/text()').extract_first()
response.selector.css('title::text').extract_first()

# 获取a标签里href参数内容
response.xpath('//a/@href').extract()
response.css('a::attr(href)').extract()

# 混合获取img标签的src属性
response.xpath('//div[@id="images"]').css('img::attr(src)').extract()

# 获取a标签中包含image的href属性
response.xpath('//a[contains(@href, "image")]/@href').extract()
response.css('a[href*=image]::attr(href)').extract()

# 使用正则表达式
response.css('a::text').re('Name\:(.*)')
response.css('a::text').re_first('Name\:(.*)')

# 添加default参数指定默认提取信息
response.css('aa').extract_first(default='')

Item Pipeline用法

通过parse处理函数返回的Item可以用Item Pipeline进行加工处理,主要是数据清洗,格式化。

# 过滤掉相同的item

class DuplicatePipeline(object):
    def __init__(self):
        self.items = set()

    def process_item(self, item, spider):
        if item['id'] in self.items:
            raise DropItem('Duplicate item found: %s' % item['id'])
        else:
            self.items.add(item['id'])
            return item

需要在settings里的注册一下自定义的Pipeline

ITEM_PIPELINES = {
     'tutorial.pipelines.TutorialPipeline': 300,
     'tutorial.pipelines.DuplicatePipeline': 200,
}

数字越小,优先级越高


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网络心理学

网络心理学

玛丽•艾肯 (Mary Aiken) / 中信出版社 / 2018-8-1 / CNY 58.00

《五十度灰》如何利用恋物心理,成为全球仅次于《圣经》的畅销读物? 为什么相对于亲朋好友,你更愿意向网络陌生人敞开心扉? 上网时总感觉时间飞逝,原来是网络的时间扭曲效应? 网络游戏中埋伏了哪些“上瘾”机关,暗中操控着你的行为? 为什么科技越发达,我们就越怕死? ...... 网络空间是一个巨大的兔子洞,里面集合了新奇、刺激、喜悦、痛苦、不安等各种元素。在日复一日的......一起来看看 《网络心理学》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具