关于python:Scrapy Xpath输出为空

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..')

用于调试和测试。