Scrapy:' //选择/选项' xpath不会产生任何结果

时间:2016-04-06 11:37:36

标签: xpath web-scraping scrapy

我一直在尝试Scrapy而且非常喜欢它。但是,我测试它的其中一项似乎不起作用。

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

//select/option

使用Chrome控制台时,下面的网站会返回一系列我可以轻松迭代的选项,但是,如果我使用scrapy.response.xpath(' // select / option')刮刀,或通过控制台,我什么也得不回来。

我的刮刀代码看起来有点像下面(为简单而编辑)

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选择器无济于事。谁知道我错过了什么?

提前多多感谢, 甲

2 个答案:

答案 0 :(得分:0)

//select/option找不到任何内容的原因是,当您使用scrapy加载时,网站中没有select标记。那是因为JavaScript没有被执行,下拉列表没有填充值。

尝试从Chrome开发者工具的设置中禁用javascript,您应该会看到scrapy在抓页时看到的相同的空白网站。

答案 1 :(得分:0)

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

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

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