来自表的URL中的Scrapy参数

时间:2017-02-27 13:46:51

标签: python python-2.7 scrapy web-crawler

大家好!

我目前正在使用Python 2.7开发Scrapy Webcrawler,虽然我知道C语言和Web语言,但我对Python和Scrapy库有点迷失。

我希望抓取一个返回JSON数据的URL,并根据预定义的参数表更改URL中的参数。

网址如下所示:

  

http://www.helloworld.com/data?From= XXX &安培;为了= YYY &安培;数= 42

在这里,我想从存储在不同文件中的一组数据中替换所有xxx,yyy,42,并使用每个参数循环爬虫。

我知道我能做到:

    def __init__(self, fromdat='xxx', todat='yyy'):
    self.start_urls = ["http://helloworld.com/data?From=%s&To=%s/" % (fromdat, todat)]

然后在命令行中使用-a命令指定参数,但这将涉及人工干预,我不希望这样做。

我也尝试过:

class QuotesSpider(scrapy.Spider):
name = "histo"
tab1=[1000,10]

def start_requests(self, tab1):
    for i in tab1:
        urls = 'http://www.helloworld.com/data?number=%d'% i
        yield scrapy.Request(url=url, callback=self.parse)


    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = 'histo-%s.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s' % filename)

但是,这似乎也没有......

我有点失落所以欢迎任何帮助! :)

非常感谢,祝你有个美好的一天!

1 个答案:

答案 0 :(得分:1)

start_requests()不接受任何其他参数,请执行以下操作:

class QuotesSpider(scrapy.Spider):
    name = "histo"
    tab1 = [1000,10]

    def start_requests(self):
        for i in self.tab1:
            urls = 'http://www.helloworld.com/data?number=%d' % i
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = 'histo-%s.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s' % filename)

注意parse()是如何缩进的。