Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scrapy只返回字母表中每个字母的第一项_Python_Web Scraping_Scrapy - Fatal编程技术网

Python Scrapy只返回字母表中每个字母的第一项

Python Scrapy只返回字母表中每个字母的第一项,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,我对stackoverflow、python和scrapy是完全陌生的。我需要整理一些词汇表,到目前为止大部分都很好,但我在下面发布了我正在努力解决的一个词汇表的脚本。我只得到每个字母的第一个条目,我不知道为什么。。。非常感谢您的帮助!谢谢nic 代码如下: import scrapy class GlossarySpider(scrapy.Spider): name = 'glossary' allowed_domains = ['www.edmunds.com']

我对stackoverflow、python和scrapy是完全陌生的。我需要整理一些词汇表,到目前为止大部分都很好,但我在下面发布了我正在努力解决的一个词汇表的脚本。我只得到每个字母的第一个条目,我不知道为什么。。。非常感谢您的帮助!谢谢nic

代码如下:

    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
            }
您可以使用
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]])

如何调用
parse()
函数?生成器对于python初学者来说并不容易理解。非常感谢。我这样做了,但是.csv在一个字段中包含所有标题,在另一个字段中包含所有文本。我想让输出看起来像这样:{'title':'OEM','text':'原始设备制造商,即车辆制造商',{'title':'Parallel hybrid','text':'一种由直列式电动机和内燃机驱动的车辆。这种类型的混合动力汽车可以在全电动模式、汽油发动机模式或组合模式下行驶。这是目前使用的最常见的混合动力汽车类型。}一个简单的解决方案是,您可以迭代列表:
for i in range(len(title)):print({}:{}.format(title[i],text[i])
很抱歉这个愚蠢的问题,但是我应该在哪里将它添加到代码中呢?您可以检查它作为参考:
以获得结果:title=result.xpath(.//dt/text()).getall()text=result.xpath(“.//dd/text()”).getall()将open('test.csv',a')作为f:csv\u writer=csv.writer(f)表示范围内的i(len(title)):csv\u writer.writerow([title[i],text[i]]))这是最简单的解决方案,不考虑性能。我已经在上面的答案中更新了它,如果你发现它有帮助,请投票,谢谢。