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)是我的输出?
编辑:我认为这是一个关于网站有动态内容的问题,任何人都可以确认这一点,如果有的话建议采取行动吗?
答案 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。