2015-11-22 2 views
4

Я использовал scrapy для получения некоторых данных о книгах на amazon.com. Мне просто нужно имя, автор и цены на книгу. Я хочу сделать это по категориям, например, книги по информатике.Scrapy пропускает некоторые элементы html

рассмотрим фрагмент кода (некоторые амазонки страницы):

<div class="a-row"> 
::before 
    <div class="a-column a-span7"> 
     <div class="a-row a-spacing-none">...</div> 
     <div class="a-row a-spacing-none">...</div> 
     <hr class="a-divider-normal s-result-divier"> 
     <div class="a-row a-spacing-none">...</div> 
     <div class="a-row a-spacing-none">...</div> 
     <div class="a-row a-spacing-none">...</div> 
    </div> 
    <div class="a-column a-span5 a-span-last"></div> 
::after 
</div> 

Таким образом, я пытался получить элементы DIV внутри сНу [@ класс = "а-а-столбец span7"]. Но возвращаются только первые два элемента div. Команда, которую я использовал, был:

>>> books = response.selector.xpath ('.//div[@class="a-fixed-left-grid-col a-col-right"]') 
>>> abook = books[0].xpath('.//div[@class="a-row"]') 
>>> prices = abook.xpath ('.//div[@class="a-column a-span7"]') 
>>> len (prices.xpath('div')) 
2 

выше код выполняет следующие действия:

  1. Получить все элементы DIV класс содержит информацию о книге на конкретной странице
  2. Получить первую «книгу» и получить div, который содержит цены на книгу
  3. Получить div с классом 'a-column a-span7'
  4. Вот в чем проблема: я не понимаю, почему количество элементов div внутри div с класс «А-а-столбец span7»

Я пробовал разные способы, чтобы получить Дивы элементы после тега < ч>, но это кажется Scrapy остановки на тег < ч>. Я попытался использовал следующий код также и результат просто показывает два элемента:

>>> abook.xpath ('div') 
[<Selector xpath='div' data=u'<div class="a-column a-span7"><div class'>, <Selector xpath='div' data=u'<div class="a-column a-span5 a-span-last'>] 

Я провел некоторое время, и я не мог решить эту проблему. Я думаю, что это очень просто.

По этой ссылке: stackref. Есть некоторые пояснения по поводу использования тега < и> < hr>, но мне это непонятно.

+0

Можете ли вы предоставить ссылку, откуда вы это очищаете? – Rahul

+0

Да. Это ссылка: http://goo.gl/9XoOt6. Страница находится на португальском (Бразилия). – Romerito

+0

Невозможно найти тег 'hr', который указан в вопросе. Есть только два div присутствия после 'class =" a-column a-span7 "' – Rahul

ответ

2

Проблема, с которой вы столкнулись, может быть решена путем присоединения user agent с вашим запросом. Попробуйте что-то вроде этого и проверьте свои результаты:

scrapy shell "http://www.amazon.com.br/s/ref=lp_12008582011_nr_n_2?fst=as%3Aoff&rh=n%3A6740748011%2Cn%3A%218169561011%2Cn%3A%218169562011%2Cn%3A12008582011%2Cn%3A12008596011&bbn=12008582011&ie=UTF8&qid=1448202280&rnid=12008582011" -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' 
+0

Отлично! Сейчас это работа. Спасибо! Итак, зачем нужно использовать USER_AGENT? – Romerito

+0

Некоторые веб-сайты не позволяют извлекать данные, поэтому иногда они блокируют или ограничивают доступ к данным ко всем запросам, которые поступают от бота, который не идентифицирует себя, т. Е. Не имеет никакого связанного с ним пользовательского агента. – Rahul

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