Python Scrapy для захвата столбцов и строк таблицы

Я относительно noob на python, и это мой первый тренинг. Я уже давно делал интеллектуальный анализ данных с perl, но это совершенно другой мяч!

Я пытаюсь очистить стол, захватить столбцы каждой строки. Мой код ниже.

items.py

from scrapy.item import Item, Field class Cio100Item(Item): company = Field() person = Field() industry = Field() url = Field() 

scrape.py (паук)

 from scrapy.spider import BaseSpider from scrapy.selector import Selector from cio100.items import Cio100Item items = [] class MySpider(BaseSpider): name = "scrape" allowed_domains = ["cio.co.uk"] start_urls = ["http://www.cio.co.uk/cio100/2013/cio/"] def parse(self, response): sel = Selector(response) tables = sel.xpath('//table[@class="bgWhite listTable"]//h2') for table in tables: # print table item = Cio100Item() item['company'] = table.xpath('a/text()').extract() item['person'] = table.xpath('a/text()').extract() item['industry'] = table.xpath('a/text()').extract() item['url'] = table.xpath('a/@href').extract() items.append(item) return items 

У меня есть некоторые проблемы с пониманием того, как правильно формулировать выбор xpath.

Я думаю, что эта линия является проблемой:

  tables = sel.xpath('//table[@class="bgWhite listTable"]//h2') 

Когда я запускаю скребок, как выше результата, я получаю такие вещи в терминале:

 2014-01-13 22:13:29-0500 [scrape] DEBUG: Scraped from <200 http://www.cio.co.uk/cio100/2013/cio/> {'company': [u"\nDomino's Pizza\n"], 'industry': [u"\nDomino's Pizza\n"], 'person': [u"\nDomino's Pizza\n"], 'url': [u'/cio100/2013/dominos-pizza/']} 2014-01-13 22:13:29-0500 [scrape] DEBUG: Scraped from <200 http://www.cio.co.uk/cio100/2013/cio/> {'company': [u'\nColin Rees\n'], 'industry': [u'\nColin Rees\n'], 'person': [u'\nColin Rees\n'], 'url': [u'/cio100/2013/dominos-pizza/']} 

В идеале я хочу только один блок, а не два, с Domino's в слоте компании, Colin в личном слоте, и индустрия захватила, чего это не делает.

Когда я использую firebug для проверки таблицы, я вижу h2 для столбцов 1 и 2 (компания и человек), но столбец 3 – h3?

Когда я изменяю строку таблиц на h3 в конце, следующим образом

  tables = sel.xpath('//table[@class="bgWhite listTable"]//h3') 

Я получаю это

 2014-01-13 22:16:46-0500 [scrape] DEBUG: Scraped from <200 http://www.cio.co.uk/cio100/2013/cio/> {'company': [u'\nRetail\n'], 'industry': [u'\nRetail\n'], 'person': [u'\nRetail\n'], 'url': [u'/cio100/2013/dominos-pizza/']} 

Здесь он производит только 1 блок, и он правильно обрабатывает Индустрию и URL. Но он не получает название компании или человека.

Любая помощь будет оценена!

Благодаря!

One Solution collect form web for “Python Scrapy для захвата столбцов и строк таблицы”

насколько xpath идет, подумайте о том, чтобы сделать что-то вроде:

 $ scrapy shell http://www.cio.co.uk/cio100/2013/cio/ ... >>> for tr in sel.xpath('//table[@class="bgWhite listTable"]/tr'): ... item = Cio100Item() ... item['company'] = tr.xpath('td[2]//a/text()').extract()[0].strip() ... item['person'] = tr.xpath('td[3]//a/text()').extract()[0].strip() ... item['industry'] = tr.xpath('td[4]//a/text()').extract()[0].strip() ... item['url'] = tr.xpath('td[4]//a/@href').extract()[0].strip() ... print item ... {'company': u'LOCOG', 'industry': u'Leisure and entertainment', 'person': u'Gerry Pennell', 'url': u'/cio100/2013/locog/'} {'company': u'Laterooms.com', 'industry': u'Leisure and entertainment', 'person': u'Adam Gerrard', 'url': u'/cio100/2013/lateroomscom/'} {'company': u'Vodafone', 'industry': u'Communications and IT services', 'person': u'Albert Hitchcock', 'url': u'/cio100/2013/vodafone/'} ... 

кроме того, что вам лучше yield предметы один за другим, а не накапливать их в списке

  • Ошибка адаптивного платежа Pay API 580001
  • API простого доступа (ключ разработчика) с облачной конечной точкой Google (Python)
  • Python 2.7, Appengine Data Store и Unicode
  • Python: a + = b не то же самое, что a = a + b
  • Как разбить текстовый файл на его слова в python?
  • Python: эффективно проверяет, находится ли целое число в * многих * диапазонах
  • Как удалить элементы leftmost / rightmost в списке, которые удовлетворяют определенному критерию в python?
  • как использовать pkgutils.get_data с csv.reader в python?
  •  
    Interesting Posts for Van-Lav

    Почему plt.imshow намного быстрее, чем plt.pcolor?

    Использование локальных заглушек Mypy

    Тензорный поток: путаница в отношении оптимизатора adam

    как получилось, что у меня больше потоков, чем процессов, которые я попросил мой пул в py3k многопроцессорности под Linux?

    Передача обработки делегата дочернему процессу в python

    Открытый модуль Python os открывает выше существующий каталог с относительным путем

    Генератор Python против понимания и передачи по ссылке vs value

    Как узнать, находится ли файл в `eof`?

    cx-freeze, runpy и многопроцессорность – несколько путей к сбою

    python: Что происходит, когда атрибут класса, атрибут экземпляра и метод имеют одно и то же имя?

    Как я могу сказать PyCharm, какой тип должен быть параметром?

    Инвертировать изображение, отображаемое imshow в matplotlib

    Могу ли я эффективно обменивать два экземпляра класса путем замены __dict__?

    python, subprocess: чтение вывода из подпроцесса

    Градиенты политики в Keras

    Python - лучший язык программирования в мире.