(Python,Scrapy)将数据从txt文件转换为Scrapy spider

时间:2017-01-23 18:27:24

标签: python csv parsing scrapy

我是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文件)中获取1230812812308148之间的范围编号

让我们说它的numbers.txt包含两行:

12308128
12308148

如何将这些数字导入我的蜘蛛?另一个过程会定期更改txt文件中的这些数字,我的蜘蛛会更新数字并运行。

谢谢。

3 个答案:

答案 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