【问题标题】:Output from python crawlerpython爬虫的输出
【发布时间】: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”语句来纠正它?谢谢!
  • 是的,与该条件相关的代码目前没有用(我不认为),因此对okif 语句的赋值可能都可以删除。
  • 太好了,谢谢你的澄清 - 我会在没有这些的情况下尝试一下,看看结果是否保持不变。
  • 你应该可以用docs.scrapy.org/en/latest/topics/item-pipeline.html来做到这一点

标签: python csv scrapy web-crawler output


【解决方案1】:

我会在蜘蛛中手动添加一些代码来为每个 csv 写入您想要的内容,因为命令行选项非常有限

https://realpython.com/python-csv/这很简单,如果你有问题,请告诉我

【讨论】:

  • 我刚刚用部分代码编辑了主帖——这样的东西能用吗?
  • 我写的代码不起作用!关于如何解决它的任何建议?
  • 让我看看。有什么错误吗?在我回家之前我无法自己测试它,但我会快速浏览一下
  • 没有错误 - 但它也没有导致输出文件!
  • 不幸的是,这绝对行不通。我仍在尝试编写两个单独的 csv 文件。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
相关资源
最近更新 更多