我是Python和Scrapy的新手。我有一个项目。在蜘蛛中有一个类似的代码:
class MySpider(BaseSpider):
name = "project"
allowed_domains = ["domain.com"]
start_urls = ["https://domain.com/%d" % i for i in range(12308128,12308148)]
我想从txt文件(或csv文件)中获取12308128
和12308148
之间的范围编号
让我们说它的numbers.txt包含两行:
12308128
12308148
如何将这些数字导入我的蜘蛛?另一个过程会定期更改txt文件中的这些数字,我的蜘蛛会更新数字并运行。
谢谢。
答案 0 :(得分:1)
您可以在spider start_requests()
方法中覆盖start_urls逻辑:
class Myspider(scrapy.Spider):
name = 'myspider'
def start_requests(self):
# read file data
with open('filename', 'r') as f:
start, end = f.read().split('\n', 1)
# make range and urls with your numbers
range_ = (int(start.strip()), int(end.strip()))
start_urls = ["https://domain.com/%d" % i for i in range(range_)]
for url in start_urls:
yield scrapy.Request(url)
这个蜘蛛会打开文件,读取数字,创建起始网址,遍历它们并为每个网页安排一个请求。
默认start_requests()
方法类似于:
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url)
所以你可以通过覆盖它来看到我们在这里做的事情。
答案 1 :(得分:0)
我相信您需要读取文件并将值传递给您的网址字符串
Start_Range = datacont.readline()
End_Range = datacont.readline()
print Start_Range
print End_Range
答案 2 :(得分:0)
您可以使用-a
命令的scrapy crawl
命令行通过命令行将任何参数传递给spider的构造函数。
scrapy crawl spider -a inputfile=filename.txt
然后像这样使用它:
class MySpider(scrapy.Spider):
name = 'spider'
def __init__(self, *args, **kwargs):
self.infile = kwargs.pop('inputfile', None)
def start_requests(self):
if self.infile is None:
raise CloseSpider('No filename')
# process file, name in self.infile
或者您可以像这样以类似的方式传递开始值和结束值:
scrapy crawl spider -a start=10000 -a end=20000