提取数据¶学习如何使用scrappy提取数据的最佳方法是使用 Scrapy shell . 运行: scrapy shell 'http://quotes.toscrape.com/page/1/'
注解 否则,在运行Scrapy命令时,请记住要在命令行中包含url。 在Windows上,使用双引号: scrapy shell "http://quotes.toscrape.com/page/1/"
您将看到类似的内容: [ ... Scrapy log here ... ]
2016-09-19 12:09:27 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/1/> (referer: None)
[s] Available Scrapy objects:
[s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s] crawler <scrapy.crawler.Crawler object at 0x7fa91d888c90>
[s] item {}
[s] request <GET http://quotes.toscrape.com/page/1/>
[s] response <200 http://quotes.toscrape.com/page/1/>
[s] settings <scrapy.settings.Settings object at 0x7fa91d888c10>
[s] spider <DefaultSpider 'default' at 0x7fa91c8af990>
[s] Useful shortcuts:
[s] shelp() Shell help (print this help)
[s] fetch(req_or_url) Fetch request (or URL) and update local objects
[s] view(response) View response in a browser
使用shell,可以尝试使用 CSS 对于响应对象: >>> response.css('title')
[<Selector xpath='descendant-or-self::title' data='<title>Quotes to Scrape</title>'>]
跑步的结果 要从上述标题中提取文本,可以执行以下操作: >>> response.css('title::text').getall()
['Quotes to Scrape']
这里有两件事需要注意:一是我们已经添加了 >>> response.css('title').getall()
['<title>Quotes to Scrape</title>']
另一件事是呼叫的结果 >>> response.css('title::text').get()
'Quotes to Scrape'
作为替代,你可以写下: >>> response.css('title::text')[0].get()
'Quotes to Scrape'
访问 >>> response.css('noelement')[0].get()
Traceback (most recent call last):
...
IndexError: list index out of range
您可能想要使用 >>> response.css("noelement").get()
这里有一个教训:对于大多数抓取代码,您希望它能够对由于在页面上找不到的东西而导致的错误具有弹性,这样即使某些部分无法抓取,您至少可以 some 数据。 除此之外 >>> response.css('title::text').re(r'Quotes.*')
['Quotes to Scrape']
>>> response.css('title::text').re(r'Q\w+')
['Quotes']
>>> response.css('title::text').re(r'(\w+) to (\w+)')
['Quotes', 'Scrape']
为了找到合适的CSS选择器,您可能会发现在Web浏览器的shell中使用 Selector Gadget 也是一个很好的工具,可以快速找到视觉上选中的元素的CSS选择器,它可以在许多浏览器中使用。 |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-11-21 21:03 , Processed in 0.053290 second(s), 33 queries .