资讯专栏INFORMATION COLUMN

Scrapy基本用法

URLOS / 853人阅读

安装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

示例代码


 
  
  Example website
 
 
  
 
# 获取标题
# 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,
}

数字越小,优先级越高

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43235.html

相关文章

  • 零基础如何学爬虫技术

    摘要:楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,。本文来源知乎作者路人甲链接楚江数据提供网站数据采集和爬虫软件定制开发服务,服务范围涵盖社交网络电子商务分类信息学术研究等。 楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,http://www.chujiangdata.com。 第一:Python爬虫学习系列教程(来源于某博主:htt...

    KunMinX 评论0 收藏0
  • 非计算机专业小白自学爬虫全指南(附资源)

    摘要:爬虫是我接触计算机编程的入门。练练练本文推荐的资源就是以项目练习带动爬虫学习,囊括了大部分爬虫工程师要求的知识点。拓展阅读一文了解爬虫与反爬虫最后,请注意,爬虫的工作机会相对较少。 爬虫是我接触计算机编程的入门。哥当年写第一行代码的时候别提有多痛苦。 本文旨在用一篇文章说透爬虫如何自学可以达到找工作的要求。 爬虫的学习就是跟着实际项目去学,每个项目会涉及到不同的知识点,项目做多了,自然...

    CarlBenjamin 评论0 收藏0
  • Python 爬虫面试题 170 道:2019 版

    摘要:下面代码会存在什么问题,如何改进一行代码输出之间的所有偶数。简述进程之间如何通信多路复用的作用模型的区别什么是并发和并行解释什么是异步非阻塞的作用面试题说说你知道的命令如何查看某次提交修改的内容答案扫码下面的二维码订阅即可获取。 引言 最近在刷面试题,所以需要看大量的 Python 相关的面试题,从大量的题目中总结了很多的知识,同时也对一些题目进行拓展了,但是在看了网上的大部分面试题不...

    trigkit4 评论0 收藏0
  • scrapy学习笔记

    摘要:是最有名的爬虫框架之一,可以很方便的进行抓取,并且提供了很强的定制型,这里记录简单学习的过程和在实际应用中会遇到的一些常见问题一安装在安装之前有一些依赖需要安装,否则可能会安装失败,的选择器依赖于,还有网络引擎,下面是下安装的过程下安装安装 scrapy是python最有名的爬虫框架之一,可以很方便的进行web抓取,并且提供了很强的定制型,这里记录简单学习的过程和在实际应用中会遇到的一...

    luzhuqun 评论0 收藏0

发表评论

0条评论

URLOS

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<