摘要:前者更好用,取不到就返回,后者取不到就一个错误。发现使用得到的是一个对象实例所以是对象实例的方法继续使用,观察区别彼女制服着替。彼女制服着替。发现对于类型的对象,并不能使用方法,而使用可以文末附官方文档链接链接官方教程关于方法
开篇明义: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 rnbingo
继续,使用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里面第一个stringextract_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
摘要:注意爬豆爬一定要加入选项,因为只要解析到网站的有,就会自动进行过滤处理,把处理结果分配到相应的类别,但偏偏豆瓣里面的为空不需要分配,所以一定要关掉这个选项。 本课只针对python3环境下的Scrapy版本(即scrapy1.3+) 选取什么网站来爬取呢? 对于歪果人,上手练scrapy爬虫的网站一般是官方练手网站 http://quotes.toscrape.com 我们中国人,当然...
摘要:图片下载和拿到下载后的路径小封面图的爬取,后面通过传到中详情页的爬取详情页的完整地址下一页的爬取与请求不明打开功能注意如要进一步定制功能补充新建 图片下载和拿到下载后的路径 1 items.py import scrapy class InfoItem(scrapy.Item): url = scrapy.Field() url_object_id = scrapy....
摘要:最近这两周在忙着给公司爬一点数据,更文的速度有一点下降,预计今天就爬完了,总结总结经验。一个爬虫的框架。基本等价于选择其中的文字提取属性文档,这个我不会,我也没看使用这个类库解析如请求方式可以用来给中文字符数据放入传递即可。 最近这两周在忙着给公司爬一点数据,更文的速度有一点下降,预计今天就爬完了,总结总结经验。 其实之前我司是有专门做爬虫的,不用前端这边出人干活。后来那人离职了,有可...
摘要:最近这两周在忙着给公司爬一点数据,更文的速度有一点下降,预计今天就爬完了,总结总结经验。一个爬虫的框架。基本等价于选择其中的文字提取属性文档,这个我不会,我也没看使用这个类库解析如请求方式可以用来给中文字符数据放入传递即可。 最近这两周在忙着给公司爬一点数据,更文的速度有一点下降,预计今天就爬完了,总结总结经验。 其实之前我司是有专门做爬虫的,不用前端这边出人干活。后来那人离职了,有可...
阅读 1918·2021-09-09 09:33
阅读 1075·2019-08-30 15:43
阅读 2610·2019-08-30 13:45
阅读 3264·2019-08-29 11:00
阅读 804·2019-08-26 14:01
阅读 3539·2019-08-26 13:24
阅读 454·2019-08-26 11:56
阅读 2668·2019-08-26 10:27