【发布时间】:2019-10-09 23:51:51
【问题描述】:
我有一个使用 scrapy 框架的 python web。我正在尝试将输出放入两个单独的文件中- 1) 网站到网站数据(即网站 1 到网站 2 的链接) & 2) 与爬虫正在寻找的关键字列表匹配的关键字 我无法让输出正常工作 - 我能够在不包含关键字组件的情况下获得 (1) 的输出,并且我可以看到 webcrawler 正在工作 - 网站和适当的关键字列在 cmd 提示符中。但是,我不能让它们保存为单独的 csv 文件。
def check_buzzwords(self, response):
self.__class__.crawl_count += 1
crawl_count = self.__class__.crawl_count
wordlist = [
"Keyword1",
"Keyword2"
]
url = response.url
contenttype = response.headers.get("content-type", "").decode('utf-8').lower()
data = response.body.decode('utf-8')
for word in wordlist:
substrings = find_all_substrings(data, word)
for pos in substrings:
ok = False
if not ok:
self.__class__.words_found += 1
print(word + ";" + url + ";")
return Item()
然后运行蜘蛛 - 这是我正在使用的命令。
scrapy crawl examplespider -o examplesemanticlevel1.csv
这个模型可以有两个单独的输出文件吗?如果没有,关于如何将我需要的 2 个文件合并为 1 个的任何想法?
The exact output that I need is as follows:
CSV File 1:
starting website | Target website
website1 | website2
Website1 | Website2
Website2 | website3
CSV File 2:
Keyword | Webpage
Keyword1 | Webpage1
Keyword2 | Webpage1
Keyword2 | Webpage2
Keyword3 | Webpage3
我在网上找到了一些代码,但我不知道如何合并它。这样的东西可以用吗?
def spider_closed(self):
with open("outputfile.csv","w", newline="") as f:
writer = csv.DictWriter(f,['Name','Year'])
writer.writeheader()
for data in self.itemlist:
writer.writerow(data)
def linkage_output_file (self, response):
df = pandas.read_csv('websitesemanticlevel2.csv',
url = 'URL',
word = 'Keyword',
header=0,
names=['url','keyword'])
df.to_csv('websitesemanticlevel2.csv')
【问题讨论】:
-
您可以编写任意数量的 CSV 文件,这应该没问题。您是否有一个特定的 URL 或您想要的确切输出示例,以便提供的任何解决方案都是您想要的?此外,您将 'ok' 设置为 False,然后不必要地检查其真实性。
-
@Dodge 感谢您的建议!我继续在我的问题中添加了示例,以提供我需要的输出的确切格式。至于“ok”,我是否会删除“if not ok”语句来纠正它?谢谢!
-
是的,与该条件相关的代码目前没有用(我不认为),因此对
ok和if语句的赋值可能都可以删除。 -
太好了,谢谢你的澄清 - 我会在没有这些的情况下尝试一下,看看结果是否保持不变。
标签: python csv scrapy web-crawler output