Scrapy Xpath output empty
我想在这个网站上提取数据:http://www.pokepedia.fr/pikachu我正在学习python,以及如何使用scrappy,我的问题是:为什么我不能用xpath检索数据?
当我在浏览器中测试xpath时,xpath看起来很好,它会返回正确的值。(谷歌Chrome)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import re from scrapy import Spider from scrapy.selector import Selector from stack.items import StackItem class StackSpider(Spider): name ="stack" allowed_domains = ["pokepedia.fr"] start_urls = [ "http://www.pokepedia.fr/Pikachu", ] def unicodize(seg): if re.match(r'\\u[0-9a-f]{4}', seg): return seg.decode('unicode-escape') return seg.decode('utf-8') def parse(self, response): pokemon = Selector(response).xpath('//*[@id="mw-content-text"]/table[2]') for question in pokemon: item = StackItem() item['title'] = question.xpath( '//*[@id="mw-content-text"]/table[2]/tbody/tr[1]/th[2]/text()').extract()[0] yield item |
我想在页面中提取口袋妖怪的名字,但当我使用:
1 | scrapy crawl stack -o items.json -t json |
号
我的JSON输出:
1 | [ |
在我的控制台中出现以下错误:
1 | IndexError : list index out of range |
。
我遵循这个图图:https://realphython.com/blog/python/web-scraping-with-scrappy-and-mongodb/
试试这个
1 | question.xpath( '//*[@id="mw-content-text"]/table[2]/tr[1]/th[2]/text()').extract()[0] |
浏览器添加tbody标记。它们不在原始的HTML中,所以scrapy返回一个空文件。
附言:你可能想考虑使用
1 | scrapy shell URL |
号
然后使用
1 | response.xpath('...YOUR SELECTOR..') |
用于调试和测试。