我想在所有具有此语法合成的页面上进行scrapy
mywebsite/?page=INTEGER
我试过了:
start_urls = ['MyWebsite']
rules = [Rule(SgmlLinkExtractor(allow=['/\?page=\d+']), 'parse')]
但似乎链接仍为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
如果不是我想停止爬行所有
答案 0 :(得分:1)
如果我说得对,你想抓取所有不到7天的网页。 一种方法是按顺序跟踪每一页(假设页面n°1是最小的,n°2早于n°1,n°3早于n°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']
:索引指示当前页面的编号。
答案 1 :(得分:0)
CrawlSpider
在这种情况下无济于事。规则用于从第一页中提取与您的模式匹配的链接。显然,您的启动网页没有指向所有这些网页的链接,这就是您无法获取这些网页的原因。
这样的事情应该有效:
class MyWebsiteSpider(Spider):
...
def start_requests(self):
for i in xrange(7677654):
yield self.make_requests_from_url('mywebsite/?page=%d' % i)