【问题标题】:Can't read in a file and then write results to a file with scrapy (python)无法读取文件,然后使用scrapy(python)将结果写入文件
【发布时间】:2015-07-09 05:56:48
【问题描述】:

我正在使用 scrapy 进行一些网页抓取,但遇到了问题。我发现我可以使用以下命令行将我的 scrapy 结果保存到 csv 文件中:

    scrapy crawl spider --set FEED_URI=output.csv --set FEED_FORMAT=csv

我还知道我可以使用以下命令行输入读取起始 url 以从文本文件中抓取:

    scrapy crawl dmoz -a filename=text.txt

我在蜘蛛中的代码是:

class DmozSpider(BaseSpider):
name = "dmoz"
allowed_domains = ["ebay.com"]

def __init__(self, filename=None):
    if filename:
        with open(filename, 'r') as f:
            self.start_urls = f.readlines()
            print self.start_urls

当我尝试同时执行这两项操作时,我的问题就出现了。我希望我的蜘蛛抓取文本文件中指定的 url,然后将输出写入 csv 文件。以下命令行由于某种原因不起作用,读取了url(我知道一个事实),但是没有写入csv文件:

   scrapy crawl dmoz -a filename=text.txt --set FEED_URI=output.csv --set FEED_FORMAT=csv

如果有人看到我做错了什么或有解决方法,将不胜感激。谢谢!

【问题讨论】:

    标签: python csv web-scraping scrapy


    【解决方案1】:

    如果您有动态启动请求,您应该使用start_requests() 来生成它们,而不是更改start_urls
    你应该这样做:

    class DmozSpider(BaseSpider):
    name = "dmoz"
    allowed_domains = ["ebay.com"]
    
    def start_requests(self):
        if self.filename:
            with open(self.filename, 'r') as f:
                for url in f.readlines():
                    yield scrapy.Request(url)
    

    要将输出写入csv 文件,您只需使用-o 参数定义文件(如果您使用有效的扩展名,则会自动选择提要格式):

    scrapy crawl dmoz -a filename=text.txt -o output.csv
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多