刮擦:'//select/option' xpath 不会产生任何结果



我一直在尝试Scrapy,非常喜欢它。然而,我正在测试的一件事似乎不起作用。

我正在尝试使用简单的xpath 抓取一个页面(例如,apple.com)并保存可用键盘选项的列表

//select/option

当使用Chrome控制台时,下面的网站会返回一系列我可以轻松迭代的选择,但是,如果我通过scraper或控制台使用scrapy.response.xpath("//select/options"),我将一无所获。

我的刮刀代码看起来有点像下面(为了简单起见,经过编辑)

import scrapy
from scrapy.linkextractors import LinkExtractor
from lxml import html
from apple.items import AppleItem

class ApplekbSpider(scrapy.Spider):
    name = 'applekb'
    allowed_domains = ['apple.com']
    start_urls = ('http://www.apple.com/ae/shop/buy-mac/imac?product=MK482&step=config#', )
    def parse(self, response):
        for sel in response.xpath('//select/option'):
            item = AppleItem()
            item['country'] = sel.xpath('//span[@class="as-globalfooter-locale-name"]/text()').extract()
            item['kb'] = sel.xpath('text()').extract()
            item['code'] = sel.xpath('@value').extract()
            yield item

正如你所看到的,我正试图获得每个选项的代码和文本,以及网站"Locale Name"(国家)。

顺便说一句,我尝试过使用CSS选择器,但没有成功。有人知道我缺了什么吗?

提前感谢,

问题是网页使用JavaScript。当你在Chrome中打开url时,浏览器会执行JavaScript代码,它会生成带有键盘选项的下拉菜单。

您应该查看一个无头浏览器(PhantomJS等),它将执行JavaScript。通过Splash,Scrapy提供了自己的无头浏览器,可以通过scrapyjs.SplashMiddleware下载中间件轻松集成。

https://github.com/scrapy-plugins/scrapy-splash

//select/option找不到任何东西的原因是当你用scratch加载网站时,网站中没有select标签。这是因为JavaScript没有被执行,下拉列表中也没有填充值。

尝试从Chrome开发工具的设置中禁用javascript,你应该会看到与scratch在抓取页面时看到的相同的空网站。

最新更新