Python Scrapy захватывает все ряды в один ряд CSV - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь создать файл CSV с помощью Scrapy, он работает, но не так, как ожидалось. У меня есть таблица html, которая имеет несколько строк, я хочу то же самое в CSV. Однако следующий код преобразует все строки HTML в одну строку CSV.

код

class DemoSpider(scrapy.Spider):
    name = "DemoSpider"

    def start_requests(self):
        urls = []
        for page in range(1, 2):
            url = "https://directory.easternuc.com/publicDirectory?page=%s" %page
            urls.append(url)

        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):

        item = TutorialItem()
        item['name'] = response.selector.xpath("//tr/td/h4/text()").getall()
        item['phone'] = response.selector.xpath("//tr/td[2]/text()").getall()
        item['mobile'] = response.selector.xpath("//tr/td[3]/text()").getall()
        item['email'] = response.selector.xpath("//tr/td[4]/text()").getall()
        yield item

, если я изменю метод getall() на get Я получаю только первую строку с веб-сайта в csv

Примечание. В качестве обходного пути я могу найти общее количество строк на веб-сайте, а затем повторить его. Однако, похоже, что в старой версии scrap работает.

1 Ответ

1 голос
/ 06 апреля 2020

Вам придется повторять каждую tr одну за другой и yield каждая запись отдельно

def parse(self, response):

    for TR in response.xpath("//table/tr"):
        item = TutorialItem()
        item['name'] = TR.xpath("./td/h4/text()").get()
        item['phone'] = TR.xpath("./td[2]/text()").get()
        item['mobile'] = TR.xpath("./td[3]/text()").get()
        item['email'] = TR.xpath("./td[4]/text()").get()
        yield item
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...