Scrapy Selector问题

时间:2018-01-31 01:53:06

标签: html python-3.x xpath scrapy web-crawler

from scrapy.spiders import BaseSpider
from scrapy.selector import HtmlXPathSelector

class PriceSpider(BaseSpider):
    name = 'price'
    start_urls = ['https://www.nyse.com/quote/XNYS:A']

    def parse(self,response):
        price = response.xpath('//div[@class="d-dquote-x3"]//text()').extract()
        print(price)

我试图从这行html中提取价格:

<div><span class="d-dquote-x3">72.99</span>

它返回一个空列表,我怎么能这样做,所以价格(72.99)是我的输出?

编辑:我认为这是一个关于网站有动态内容的问题,任何人都可以确认这一点,如果有的话建议采取行动吗?

2 个答案:

答案 0 :(得分:0)

问题是选择器错误。你的元素是

<div><span class="d-dquote-x3">72.99</span>

因此,该课程与span相关联,而非div。你需要

price = response.xpath('//span[@class="d-dquote-x3"]//text()').extract()

答案 1 :(得分:0)

是的,该页面包含动态内容。从它在浏览器中加载的方式来看,它非常明显,但您也可以通过更直接地获取html并查看它来进行检查。我是这样做的:

import requests
response = requests.get('https://www.nyse.com/quote/XNYS:A')
with open('/tmp/test.html', 'w') as out:
    out.write(response.text)

然后我在浏览器中查看/tmp/test.html。没有报价数据。

如果您想获取此数据,则需要查看headless browsers