2015-03-28 3 views
1

Я пытаюсь выбрать значения, содержащиеся в последнем столбце таблицы по адресу: https://ca.finance.yahoo.com/q/hp?s=bmo.TO&a=02&b=2&c=2005&d=02&e=2&f=2015&g=mPython: Если заявления и Scrapy XPath селектор

Обычно, это было бы очень просто. Что-то вроде:

response.xpath('//table//table//tr[::6]/text()').extract() 

Однако, п-я элемента постоянно изменяется из-за эти дивидендные строки Yahoo выбирает, чтобы бросить там. Тем не менее, я заметил, что для каждой строки, что я хочу, чтобы выбрать данные, первый тд содержит:

Feb 2, 2015 

вместо:

2015-01-29 

Поэтому я пытаюсь построить код, который следует логика, где, если первая ячейка таблицы содержит ЛЮБЫЕ буквы, выберите последний столбец и добавьте его в список. Код, который у меня есть, ниже:

returns = [] 
trows = response.xpath('//table//table//tr') 
for tr in trows: 
     # don't know why I need to use "2" in the following line, but that's what gives me the first value. 
    check = response.xpath('//td[2]/text()').extract() 
    if any(c.isalpha() for c in check) == True: 
     these = tr[6] 
     returns.append(these) 

Это содержит всевозможные проблемы, хотя, как я уверен, вы можете себе представить. Это дает мне значение 1 td повторяется столько раз, сколько в таблице есть tr. Когда конечный результат, который мне нужен, является последним td.

Очень благодарен за любую полученную помощь! Я пытаюсь сделать это для проекта класса финансов, чтобы изучить python вместо ввода значений вручную.

Cheers!

ответ

1

Я бы уточнил, соответствует ли дата формату %b %d, %Y с помощью strptime() и обработке исключений. Другими словами, следуйте за EAFP principle.

Demo от Scrapy Shell:

In [1]: from datetime import datetime 
In [2]: rows = response.xpath('//table[@class="yfnc_datamodoutline1"]//table/tr')[1:] 
In [3]: for row in rows: 
      cells = row.xpath('.//td/text()').extract() 
      try: 
       datetime.strptime(cells[0], "%b %d, %Y") 
       print cells[-1] 
      except ValueError: 
       continue  
77.15 
77.46 
72.93 
81.33 
82.99 
80.88 
... 
44.12 
42.46 
39.00 
42.20 

Я также улучшил выражения XPath, чтобы сосредоточиться на нужных данных таблицы.

+0

Вы, сэр, потрясающие. Спасибо. Работает как шарм. – thefoxrocks

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