Python Scrapy只返回字母表中每个字母的第一项
我对stackoverflow、python和scrapy是完全陌生的。我需要整理一些词汇表,到目前为止大部分都很好,但我在下面发布了我正在努力解决的一个词汇表的脚本。我只得到每个字母的第一个条目,我不知道为什么。。。非常感谢您的帮助!谢谢nic 代码如下: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']
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]]))这是最简单的解决方案,不考虑性能。我已经在上面的答案中更新了它,如果你发现它有帮助,请投票,谢谢。