5

我对 Python 有点陌生,对 Scrapy 也很陌生。

我设置了一个蜘蛛来抓取和提取我需要的所有信息。但是,我需要将一个 .txt 的 URL 文件传递​​给 start_urls 变量。

例如:

class LinkChecker(BaseSpider):
    name = 'linkchecker'
    start_urls = [] #Here I want the list to start crawling a list of urls from a text file a pass via the command line.

我做了一些研究,一直空手而归。我见过这种类型的示例(如何在 scrapy spider 中传递用户定义的参数),但我认为这不适用于传递文本文件。

4

4 回答 4

20

使用以下选项运行您的蜘蛛-a

scrapy crawl myspider -a filename=text.txt

__init__然后在蜘蛛的方法中读取文件并定义start_urls

class MySpider(BaseSpider):
    name = 'myspider'

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

希望有帮助。

于 2013-06-25T21:21:47.693 回答
4

你可以简单地读入 .txt 文件:

with open('your_file.txt') as f:
    start_urls = f.readlines()

如果您以尾随换行符结尾,请尝试:

with open('your_file.txt') as f:
    start_urls = [url.strip() for url in f.readlines()]

希望这可以帮助

于 2013-06-25T21:21:36.180 回答
2

如果您的网址是行分隔的

def get_urls(filename):
        f = open(filename).read().split()
        urls = []
        for i in f:
                urls.append(i)
        return urls 

那么这行代码会给你网址。

于 2013-06-25T21:31:34.150 回答
1
class MySpider(scrapy.Spider):
    name = 'nameofspider'

    def __init__(self, filename=None):
        if filename:
            with open('your_file.txt') as f:
                self.start_urls = [url.strip() for url in f.readlines()]

这将是您的代码。如果它们由行分隔,它将从 .txt 文件中获取 url,例如 url1 url2 等。

之后运行命令 -->

scrapy crawl nameofspider -a filename=filename.txt

可以说,您的文件名是“file.txt”,然后运行命令-->

scrapy crawl myspider -a filename=file.txt
于 2017-06-16T18:15:38.910 回答