如何在Scrapy搜寻器中发起全新的请求?

时间:2018-11-26 08:11:39

标签: http scrapy web-crawler

我正在从一个网站进行抓取,该网站将为每个请求会话提供一个sid,在获得sid之后,我将对此sid进行进一步的搜索查询并抓取结果。

我想在每次抓取单个查询的所有结果后都更改sid,我曾尝试清除cookie,但这是行不通的。

但是,如果我重新启动搜寻器,每次都会得到一个不同的sid,我只是不知道如何在不重新启动搜寻器的情况下获得新的sid

我想知道是否还有其他东西让服务器知道两个请求来自同一连接。

谢谢!

这是我当前的代码:

class MySpider(scrapy.Spider):
    name = 'my_spider'
    allowed_domains = ['xxx.com']
    start_urls = ['http://xxx/']

    sid_pattern = r'SID=(\w+)&'
    SID = None
    query_list = ['aaa', 'bbb', 'ccc']
    i = 0

    def parse(self, response):
        if self.i >= len(self.query_list):
            return
        pattern = re.compile(self.sid_pattern)
        result = re.search(pattern, response.url)
        if result is not None:
            self.SID = result.group(1)
        else:
            exit(-1)

        search_url = 'http://xxxx/AdvancedSearch.do'            
        query = self.query_list[i]
        self.i += 1

        query_form = {
            'aaa':'bbb'
        }

        yield FormRequest(adv_search_url, method='POST', formdata=query_form, dont_filter=True,
                          callback=self.parse_result_entry)
        yield Request(self.start_urls[0], cookies={}, callback=self.parse,dont_filter=True)

    def parse_result(self, response):
        do something

1 个答案:

答案 0 :(得分:0)

设置COOKIES_ENABLED = False可以实现此目的,但是除了全局设置之外还有其他方法吗?