与scrapy和Xpath的空的名单

时间:2015-11-03 21:39:27

标签: python xpath web-scraping scrapy

我开始使用scrapy和xpath来抓取一些页面,我只是使用ipython尝试简单的事情,我在一些页面中得到了回应,比如IMDB,但当我尝试其他像www .bbb.org我总是得到一个空列表。这就是我正在做的事情:

scrapy shell 'http://www.bbb.org/central-western-massachusetts/business-reviews/auto-repair-and-service/toms-automotive-in-fitchburg-ma-211787'
  

BBB认证

     

自2010年12月2日起获得BBB认证的业务

     
BBB已经确定汤姆的汽车符合BBB认证标准,其中包括承诺......"

本段的xpath是:

'//*[@id="business-accreditation-content"]/p[2]'

所以我用:

data = response.xpath('//*[@id="business-accreditation-content"]/p[2]').extract()

但是data是一个空列表,我使用chrome获取Xpath并且它可以在其他页面中使用,但是无论我在哪个页面尝试,我都没有得到任何结果。

1 个答案:

答案 0 :(得分:2)

网站实际上会检查User-Agent标题。

如果您没有指定它,请查看它返回的内容:

$ scrapy shell 'http://www.bbb.org/central-western-massachusetts/business-reviews/auto-repair-and-service/toms-automotive-in-fitchburg-ma-211787'
In [1]: print(response.body)
Out[1]: 123

In [2]: response.xpath('//*[@id="business-accreditation-content"]/p[2]').extract()
Out[2]: []

是的,没错 - 如果有意外的请求用户代理,则响应仅包含123

现在使用标题(注意指定的-s命令行参数):

$ scrapy shell 'http://www.bbb.org/central-western-massachusetts/business-reviews/auto-repair-and-service/toms-automotive-in-fitchburg-ma-211787' -s USER_AGENT='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36'
In [1]: response.xpath('//*[@id="business-accreditation-content"]/p[2]').extract()
Out[1]: [u'<p itemprop="description">BBB has determined that Tom\'s Automotive meets <a href="http://www.bbb.org/central-western-massachusetts/for-businesses/about-bbb-accreditation/bbb-code-of-business-practices-bbb-accreditation-standards/" lang="LS30TPCERNY5b60c87311af50cf82720b237d8ef866">BBB accreditation standards</a>, which include a commitment to make a good faith effort to resolve any consumer complaints. BBB Accredited Businesses pay a fee for accreditation review/monitoring and for support of BBB services to the public.</p>']

这是shell的一个例子。在真正的Scrapy项目中,您需要设置USER_AGENT project setting。或者,您也可以借助此中间件使用用户代理轮换:scrapy-fake-useragent