所有有此语法的页面上都有残羹剩饭

2024-09-24 22:32:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把所有有这种语法的页面都翻出来

mywebsite/?page=INTEGER

我试过了:

^{pr2}$

但似乎链接仍然MyWebsite。那么,我该怎么做才能让它明白我想添加/?page=NumberOfPage?拜托?在

编辑

我的意思是我想把这几页废掉:

mywebsite/?page=1
mywebsite/?page=2
mywebsite/?page=3
mywebsite/?page=4
mywebsite/?page=5
..
..
..
mywebsite/?page=7677654

我的代码

start_urls = [
        'http://example.com/?page=%s' % page for page in xrange(1,100000)
    ]
def parse(self, response):
    sel = Selector(response)
    sites = sel.xpath('my xpath')
    for site in sites:

        DateDifference= site.xpath('xpath for date difference').extract()[0]

        if DateDifference.days < 8:
            yield Request(Link, meta={'date': Date}, callback = self.crawl)

我想得到所有的数据页面,已经添加在过去7天。我不知道在过去的7天里增加了多少页。所以我认为我可以在大量的页面上爬行,比方说100000,然后我检查datedifference如果少于7天,我想yield如果不想停止爬行。在


Tags: inselffordateresponsepage语法site
2条回答

在这种情况下,CrawlSpider使用规则将没有帮助。规则用于从第一页中提取与您的模式匹配的链接。显然,你的起始url页面没有指向所有这些页面的链接,这就是为什么你没有得到它们。在

这样的方法应该有效:

class MyWebsiteSpider(Spider):
    ...

    def start_requests(self):
        for i in xrange(7677654):
            yield self.make_requests_from_url('mywebsite/?page=%d' % i)

如果我做对了,你要抓取所有小于7天的页面。 一种方法是按顺序跟随每一页(假设第1页是最年轻的,第2页比第1页老,第3页比第2页老……)。在

你可以做些像

start_urls = ['mywebsite/?page=1']

def parse(self, response):
    sel = Selector(response)
    DateDifference= sel.xpath('xpath for date difference').extract()[0]

    i = response.meta['index'] if 'index' in response.meta else 1

    if DateDifference.days < 8:
        yield Request(Link, meta={'date': Date}, callback = self.crawl)
        i += 1
        yield Request('mywebsite/?page='+str(i), meta={'index':i}, callback=self.parse)

其思想是按顺序执行parse。如果这是您第一次进入函数,response.meta['index']没有定义:索引是1。如果这是一个在我们已经解析了另一个页面之后的调用,response.meta['index']被定义:索引表示当前被刮取的页面的编号。在

相关问题 更多 >