资讯专栏INFORMATION COLUMN

Scrapy框架get() 、getall() 、extract() 、extract_first(

liangzai_cool / 1392人阅读

摘要:前者更好用,取不到就返回,后者取不到就一个错误。发现使用得到的是一个对象实例所以是对象实例的方法继续使用,观察区别彼女制服着替。彼女制服着替。发现对于类型的对象,并不能使用方法,而使用可以文末附官方文档链接链接官方教程关于方法

开篇明义:get() 、getall() 是新版本的方法,extract() 、extract_first()是旧版本的方法。

前者更好用,取不到就返回None,后者取不到就raise一个错误。

推荐使用新方法,官方文档中也都改用前者了

看官方文档(链接附在文末),看到了关于get()、get()方法的使用,查阅网络没有资料,那就自己记录一下。
y( ˙ᴗ. )耶~y( ˙ᴗ. )耶~y( ˙ᴗ. )耶~y( ˙ᴗ. )耶~y( ˙ᴗ. )耶~y( ˙ᴗ. )耶~y( ˙ᴗ. )耶~y( ˙ᴗ. )耶~y( ˙ᴗ. )耶~
先说结论:
对于scrapy.selector.unified.SelectorList对象,getall()==extract(),get()==extract_first()
对于scrapy.selector.unified.Selector对象,getall()==extract(),get()!=extract_first()
使用scrapy shell 进行测试

scrapy shell https://gavbus668.com/

得到如下结果:

皆是常规操作

返回html的前200个字符,看看没有发生错误

response.text[:200]

得到:

Out[3]: "rnrn    rn    rn    rn    

bingo

继续,使用Scrapy Selector下一步操作

In [5]: response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()")
Out[5]:
[,
,
,
]
In [10]: type(response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()"))
Out[10]: scrapy.selector.unified.SelectorList

发现使用Selector得到的是一个SelectorList对象实例

所以get() 、getall() 、extract() 、extract_first()是SelectorList对象实例的方法

继续使用get() 、getall() 、extract() 、extract_first(),观察区别:

In [6]: response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()").get()
Out[6]: "DNW-025 彼女が制服に着替えたら。5"
In [7]: response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()").getall()
Out[7]: ["DNW-025 彼女が制服に着替えたら。5", "rntttttt", "rntttttt", " / "]
In [8]: response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()").extract()
Out[8]: ["DNW-025 彼女が制服に着替えたら。5", "rntttttt", "rntttttt", " / "]
In [9]: response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()").extract_first()
Out[9]: "DNW-025 彼女が制服に着替えたら。5"

over,总结一下:
对于scrapy.selector.unified.SelectorList对象
get() == extract_first()
返回的是一个list,里面包含了多个string,如果只有一个string,则返回["我很孤独"]这样的形式
getall() == extract()
返回的是string,list里面第一个string

extract_first()与get()有区别与Selector对象有关

In [17]: type(response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()"))
Out[17]: scrapy.selector.unified.SelectorList

In [18]: type(response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0])
Out[18]: scrapy.selector.unified.Selector

In [19]: response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0].get()
Out[19]: "DNW-025 彼女が制服に着替えたら。5"

In [20]: response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0].getall()
Out[20]: ["DNW-025 彼女が制服に着替えたら。5"]

In [21]: response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0].extract()
Out[21]: "DNW-025 彼女が制服に着替えたら。5"

In [22]: response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0].extract_first()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
 in 
----> 1 response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0].extract_first()

AttributeError: "Selector" object has no attribute "extract_first"

In [23]: response.xpath("//*[@id="waterfall"]/div[1]/a/div[2]/span/text()")[0]
Out[23]: 

发现:对于Selector类型的对象,并不能使用extract_first()方法,而使用get()可以

文末附官方文档链接链接
Scrapy官方教程——关于get()、getall()方法

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

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

相关文章

  • scrapy入门教程——爬取豆瓣电影Top250!

    摘要:注意爬豆爬一定要加入选项,因为只要解析到网站的有,就会自动进行过滤处理,把处理结果分配到相应的类别,但偏偏豆瓣里面的为空不需要分配,所以一定要关掉这个选项。 本课只针对python3环境下的Scrapy版本(即scrapy1.3+) 选取什么网站来爬取呢? 对于歪果人,上手练scrapy爬虫的网站一般是官方练手网站 http://quotes.toscrape.com 我们中国人,当然...

    senntyou 评论0 收藏0
  • scrapy学习之路2(图片下载与下载的路径获取)

    摘要:图片下载和拿到下载后的路径小封面图的爬取,后面通过传到中详情页的爬取详情页的完整地址下一页的爬取与请求不明打开功能注意如要进一步定制功能补充新建 图片下载和拿到下载后的路径 1 items.py import scrapy class InfoItem(scrapy.Item): url = scrapy.Field() url_object_id = scrapy....

    WelliJhon 评论0 收藏0
  • 从零开始写爬虫

    摘要:几个朋友对爬虫很感兴趣,他们也都是开发人员,一个开发两个开发,都没有过项目开发经验,正好其中一个最近要爬一个网店的产品信息,所以希望我能拿这网站当写一个爬虫来给他们参考学习。我们就在这个文件里开发爬虫的相关逻辑。 几个朋友对爬虫很感兴趣,他们也都是开发人员,一个PHP开发两个JAVA开发,都没有过python项目开发经验,正好其中一个最近要爬一个网店的产品信息,所以希望我能拿这网站当d...

    wwq0327 评论0 收藏0
  • 爬虫爬 JSON HTML 数据

    摘要:最近这两周在忙着给公司爬一点数据,更文的速度有一点下降,预计今天就爬完了,总结总结经验。一个爬虫的框架。基本等价于选择其中的文字提取属性文档,这个我不会,我也没看使用这个类库解析如请求方式可以用来给中文字符数据放入传递即可。 最近这两周在忙着给公司爬一点数据,更文的速度有一点下降,预计今天就爬完了,总结总结经验。 其实之前我司是有专门做爬虫的,不用前端这边出人干活。后来那人离职了,有可...

    Hegel_Gu 评论0 收藏0
  • 爬虫爬 JSON HTML 数据

    摘要:最近这两周在忙着给公司爬一点数据,更文的速度有一点下降,预计今天就爬完了,总结总结经验。一个爬虫的框架。基本等价于选择其中的文字提取属性文档,这个我不会,我也没看使用这个类库解析如请求方式可以用来给中文字符数据放入传递即可。 最近这两周在忙着给公司爬一点数据,更文的速度有一点下降,预计今天就爬完了,总结总结经验。 其实之前我司是有专门做爬虫的,不用前端这边出人干活。后来那人离职了,有可...

    cocopeak 评论0 收藏0

发表评论

0条评论

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