Scrapy读取从文件到scrape的URL列表?

Ana*_*gio 12 python scrapy

我刚刚安装了scrapy,并按照他们的简单dmoz 教程工作.我只是查找了python的基本文件处理,并试图让爬虫从文件中读取URL列表,但是出现了一些错误.这可能是错的,但我试了一下.有人请告诉我一个将URL列表读入scrapy的例子吗?提前致谢.

from scrapy.spider import BaseSpider

class DmozSpider(BaseSpider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    f = open("urls.txt")
    start_urls = f

    def parse(self, response):
        filename = response.url.split("/")[-2]
        open(filename, 'wb').write(response.body)
Run Code Online (Sandbox Code Playgroud)

Bri*_*ain 35

你非常接近.

f = open("urls.txt")
start_urls = [url.strip() for url in f.readlines()]
f.close()
Run Code Online (Sandbox Code Playgroud)

...更好的方法是使用上下文管理器确保文件按预期关闭:

with open("urls.txt", "rt") as f:
    start_urls = [url.strip() for url in f.readlines()]
Run Code Online (Sandbox Code Playgroud)

  • `readlines()`在每行末尾保留换行符.我已经提交了一个编辑,它将`strip()`换行并关闭文件. (3认同)

Bri*_*and 8

如果 Dmoz 只需要列表中的文件名,则必须在每一行上调用 strip。否则,您会在每个 URL 的末尾得到一个 '\n'。

class DmozSpider(BaseSpider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [l.strip() for l in open('urls.txt').readlines()]
Run Code Online (Sandbox Code Playgroud)

Python 2.7 中的示例

>>> open('urls.txt').readlines()
['http://site.org\n', 'http://example.org\n', 'http://example.com/page\n']
>>> [l.strip() for l in open('urls.txt').readlines()]
['http://site.org', 'http://example.org', 'http://example.com/page']
Run Code Online (Sandbox Code Playgroud)