2016-09-27 3 views
1

Я пытаюсь проанализировать некоторые данные из таблицы (баланса) в каждом отчете о прибылях и убытках. Здесь я использую AMD в качестве примера, но не только для AMD.Python, проблемы с скрипом при анализе таблиц в отчетах о получении

Вот the link

Проблема у меня есть сейчас, что я не могу получить любое чтение - мой паук всегда возвращает пустой результат. Я использовал scrapy shell "http://example.com" для проверки моего xpath, который я непосредственно скопировал из Google Chrome Inspector, и он все еще не работает.

Вот мой XPath (Chrome браузер при условии):

//*[@id="newsroom-copy"]/div[2]/div[8]/table/tbody/tr[9]/td[4]/text() 

Вот мой код:

import scrapy 

class ESItem(scrapy.Item): 
    Rev = scrapy.Field() 

class ESSpider(scrapy.Spider): 
    name = "es" 
    start_urls = [ 
     'http://www.marketwired.com/press-release/amd-reports-2016-second-quarter-results-nasdaq-amd-2144535.htm', 
    ] 

    def parse(self, response): 
     item = ESItem() 
     for earning in response.xpath('//*[@id="newsroom-copy"]/div[2]/div[8]/table/tbody'): 
      item['Rev'] = earning.xpath('tr[9]/td[4]/text()').extract_first() 
      yield item 

Ищу для извлечения «номера доходов» из таблицы в нижней части Отчет.

Спасибо!

я запускаю мой код, используя эту команду:

scrapy runspider ***.py -o ***.json 

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

ОБНОВЛЕНИЕ: Я как бы выяснил что-то ... Я должен удалить тег «tbody» из XPATH, который я не понимаю ... Может кто-нибудь объяснить это немного, пожалуйста?

+1

Вам нужно очистить его от сети? Существует множество финансовых авиз, которые уже используют эту информацию. – zhqiat

+0

Моя основная цель - изучить Scrapy ...поэтому, да, есть некоторые API, которые я могу использовать, но я все еще хочу знать, как добиться этого сам. :) –

ответ

0

html, предоставленный средством проверки в chrome, является результатом интерпретации браузером фактического кода, который он отправляет сервером в ваш браузер.

Тег tbody является ярким примером. Если посмотреть исходный код страницы веб-сайта вы увидите структуру, подобные этой

<table> 
    <tr> 
     <td></td> 
    </tr> 
</table> 

Теперь, если вы проверяете страница это происходит

<table> 
    <tbody> 
     <tr> 
      <td></td> 
     </tr> 
    </tbody> 
</table> 

Что SCRAPY получает исходную страницу, а не " инспектор ", поэтому всякий раз, когда вы пытаетесь выбрать что-либо на странице, убедитесь, что он существует на источнике страницы.

Другим примером этого является попытка выбрать какой-либо элемент, который генерируется javascript во время загрузки страницы. Scrapy не получит этого, так что вам нужно будет использовать что-то еще, чтобы интерпретировать его как всплеск или селен.

В качестве побочного примечания найдите время, чтобы изучить селектор xpath и css. Это экономия времени, когда вы знаете, как правильно обращаться к элементам запроса.

//*[@id='newsroom-copy']/div[2]/div[8]/table/tr[9]/td[4]/text() 

эквивалентно

//table/tr[td/text()='Net revenue']/td[4]/text() 

Посмотрите, как гораздо лучше выглядит?

+0

отлично! Теперь у меня гораздо лучшее понимание. Большое спасибо! –