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 предметы один за другим, а не накапливать их в списке

  • python: печать по горизонтали, а не текущая печать по умолчанию
  • Работа с субдоменом в движке Google
  • Python - Как перенаправить stderr в файл?
  • Force python не выводить float в стандартной форме / научная нотация / экспоненциальная форма
  • Google App Engine: Webtest, имитирующий вход в систему пользователя и администратора
  • Как называть время с time.h с Cython?
  • Не могу получить winsound.Beep для работы
  • Вывод первых 100 символов в строке
  • Получение python для работы, Внутренняя ошибка сервера
  • Текущее решение для чистого python для facebook-oauth?
  • Каков наилучший способ создания объекта Python, когда у вас есть реализация класса, хранящаяся в строке?
  •  
    Interesting Posts for Van-Lav

    Избегание «сервера MySQL ушло» на редко используемом сервере Python / Flask с SQLAlchemy

    Обработка ошибок Unicode с помощью readlines Python 3 ()

    Сериализация необязательно вложенных структур: разница между QueryDict и нормальным dict?

    В python (django) как я могу остановить доступ к глобальной структуре данных словаря при его обновлении?

    Недопустимый синтаксис с использованием определения dict

    Суммирование нескольких столбцов с помощью нескольких индексов

    Coredump при компиляции python с пользовательской версией openssl

    Класс периодических осей в matplotlib?

    Разделить строку на строки повторяющихся элементов

    Разница между Linux и Windows, когда дело доходит до кодирования и подписания

    Каков рабочий процесс для безопасной системы «проверка по электронной почте»?

    Python Pandas для R dataframe

    Базовая сеть с Pygame

    defaultdict не определен

    Перемещение таблиц, связанных с внешним ключом, в шаблонах django

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