Как я собираю данные, используя ItemLoaders из таблицы, используя Scrapy? - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь извлечь данные с веб-сайта "https://www.brickworkratings.com/CreditRatings.aspx". Есть таблица, из которой я могу легко извлечь данные через Scrapy Shell.

Я хотел использовать ItemLoaders, так как он действительно мощныйи дает более чистый опыт.

Вот мой код ниже.

def start_requests(self):
    yield Request("https://www.brickworkratings.com/CreditRatings.aspx", self.parse_credit_rating_response)

def parse_credit_rating_response(self, response):
    table_rows = response.xpath('//*[@id="ContentPlaceHolder1_gvData"]//tr')
    for table_row in table_rows:
        loader = ItemLoader(SampleItem(), response=response)
        try:
            loader.get_xpath(table_row.xpath("td[1]//a/text()")[0].extract())
            # loader.add_value('company_name', 'test')
        except Exception as e:
            print(e)
        item = loader.load_item()
        print(item)
        yield item

Я получаю сообщение об ошибке,

"XPath error: Invalid expression in 
                                                                        (Name of the Company)".

Я верю, что мой XPath правильный, но яНе думаю, что это способ использовать его. Как я правильно его использую? Мне нужно извлечь данные из таблицы и я хотел бы использовать более мощные ItemLoaders.

Любая помощь будет оценена, застрялна нем надолго.

1 Ответ

0 голосов
/ 27 февраля 2019

Вам необходимо указать начальный / родительский селектор при создании загрузчика.Тогда нет необходимости предоставлять также ответ .И тогда вам нужно передать строку XPath в add_xpath вместо использования get_xpath.Обратитесь к документации .

Если ваш XPath верен, вот пример:

# All added selectors will now be relative to table_row.
loader = ItemLoader(SampleItem(), selector=table_row)
# Just give it the XPath here.
loader.add_xpath("field_name", "td[1]//a/text()")

Если вам требуется дополнительная обработка, посмотрите на процессоры ввода / вывода .

...