我是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.
我做了一些研究并且空手而归。我已经看过这种类型的示例(How to pass a user defined argument in scrapy spider),但我认为这不适用于传递文本文件。
答案 0 :(得分:16)
使用-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()
希望有所帮助。
答案 1 :(得分:3)
你可以简单地读入.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()]
希望这有帮助
答案 2 :(得分:2)
如果你的网址是分开的
def get_urls(filename):
f = open(filename).read().split()
urls = []
for i in f:
urls.append(i)
return urls
然后这行代码将为您提供网址。
答案 3 :(得分: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