2015-11-03 2 views
2

Я начинаю использовать scrapy и xpath для очистки какой-либо страницы, я просто пытаюсь использовать простые вещи с помощью ipython, я получаю ответ на некоторых страницах, например, в IMDB, но когда я пытаюсь в других например, www.bbb.org. Я всегда получаю пустой список. Это то, что я делаю:Пустой список с scrapy и Xpath

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

ВВВ аккредитации

A BBB Аккредитованные бизнеса с 02/12/2010

ВВВ определил, что Automotive Том отвечает стандартам аккредитации BBB, которые включают в себя обязательство ......»

XPath этого абзаца:

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

Поэтому я использую:

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

Но data является пустой список, я получаю Xpath с хромом, и она работает на других страницах, но здесь я ничего не получаю независимо от того, какая часть страницы I пытаться.

ответ

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>'] 

Это был пример из командной строки. В реальном проекте Scrapy вам необходимо установить USER_AGENT project setting. Или вы также можете использовать вращение агента пользователя с помощью этого промежуточного программного обеспечения: scrapy-fake-useragent.

Смежные вопросы