我正在使用 scrapy 抓取网站并从中提取数据,scrapy 使用基于正则表达式的规则来检查是否必须解析页面,或者必须遵循链接。
我正在为我的蜘蛛实现一个恢复功能,这样它就可以从上次访问的页面继续抓取。为此,我在蜘蛛启动时从数据库中获取了最后一个关注的链接。
我的网站 url 看起来像 http://foobar.com/page1.html,所以通常情况下,规则的正则表达式会像这样遵循每个链接,类似于 /page\d+\.html.
但是我如何编写一个正则表达式来匹配,例如,第 15 页或更多?另外,由于我事先不知道起点,我怎么能在运行时生成这个正则表达式?
请您参考如下方法:
为什么不把页码分组,然后检查是否合格:
>>> m=re.match("/page(\d+)\.html","/page18.html")
>>> if m:
ID=int(m.groups()[0])
>>> ID > 15
True
或者更具体地说是您的要求:
>>> def genRegex(n):
return ''.join('[' + "0123456789"[int(d):] + ']' for d in str(n))
>>> genRegex(123)
'[123456789][23456789][3456789]'
