首页 > 解决方案 > Scrapy 仅返回字母列表中每个字母的第一项

问题描述

我对stackoverflow以及python和scrapy完全陌生。我需要抓取一些词汇表,到目前为止大多数都很好,但我正在为我在下面苦苦挣扎的那个发布脚本。我只得到每封信的第一个条目,我不知道为什么......非常感谢任何帮助!谢谢!网卡

这是代码:

    import scrapy


class GlossarySpider(scrapy.Spider):
    name = 'glossary'
    allowed_domains = ['www.edmunds.com']
    start_urls = ['https://www.edmunds.com/glossary/']

    def parse(self, response):
        results = response.xpath ("//div[@class='content']/dl")
        for result in results:
            title = result.xpath(".//dt/text()").get()
            text = result.xpath(".//dd/text()").get()
            yield{
                'title': title,
                'text': text
            }

标签: pythonweb-scrapingscrapy

解决方案


您可以使用getall()方法返回包含所有结果的列表。

顺便说一句,在获得结果列表后,您需要稍微修改代码以实际映射名称和它的定义。

获取列表后,您可以简单地对其进行迭代,然后写入 csv 文件。下面是一个例子

     with open('test.csv', 'a') as f:
        csv_writer = csv.writer(f)
        for result in results:
            title = result.xpath(".//dt/text()").getall()
            text = result.xpath(".//dd/text()").getall()
            for i in range(len(title)):
                csv_writer.writerow([title[i], text[i]])

推荐阅读