scrapy LinkExtractor(allow=(url)) 获取错误的抓取页面,正则表达式不起作用
The scrapy LinkExtractor(allow=(url)) get the wrong crawled page, the regulex doesn't work
我想抓取页面 http://www.douban.com/tag/%E7%88%B1%E6%83%85/movie。
我的蜘蛛代码的一部分是:
class MovieSpider(CrawlSpider):
name = "doubanmovie"
allowed_domains = ["douban.com"]
start_urls = ["http://www.douban.com/tag/%E7%88%B1%E6%83%85/movie"]
rules = (
Rule(LinkExtractor(allow=(r'http://www.douban.com/tag/%E7%88%B1%E6%83%85/movie\?start=\d{2}'))),
Rule(LinkExtractor(allow=(r"http://movie.douban.com/subject/\d+")), callback = "parse_item")
)
def start_requests(self):
yield FormRequest("http://www.douban.com/tag/%E7%88%B1%E6%83%85/movie",headers={'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0'})
我只想抓取“\?start=\d{2}”这样的页面,但是scrapy蜘蛛也会抓取“\?start=100”或“\?start=1000”这样的页面.它出什么问题了?如何解决?
提前致谢。
正则表达式 \d{2}
匹配所有以两位数开头的数字。
如果您想将正则表达式限制为两位数,您可以使用 \d{2}$
以便它仅在行尾有两个数字时才匹配。
更一般的做法是使用 \d{2}\b
,这样任何非字母数字值或空格都必须跟在后面。
我想抓取页面 http://www.douban.com/tag/%E7%88%B1%E6%83%85/movie。 我的蜘蛛代码的一部分是:
class MovieSpider(CrawlSpider):
name = "doubanmovie"
allowed_domains = ["douban.com"]
start_urls = ["http://www.douban.com/tag/%E7%88%B1%E6%83%85/movie"]
rules = (
Rule(LinkExtractor(allow=(r'http://www.douban.com/tag/%E7%88%B1%E6%83%85/movie\?start=\d{2}'))),
Rule(LinkExtractor(allow=(r"http://movie.douban.com/subject/\d+")), callback = "parse_item")
)
def start_requests(self):
yield FormRequest("http://www.douban.com/tag/%E7%88%B1%E6%83%85/movie",headers={'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0'})
我只想抓取“\?start=\d{2}”这样的页面,但是scrapy蜘蛛也会抓取“\?start=100”或“\?start=1000”这样的页面.它出什么问题了?如何解决? 提前致谢。
正则表达式 \d{2}
匹配所有以两位数开头的数字。
如果您想将正则表达式限制为两位数,您可以使用 \d{2}$
以便它仅在行尾有两个数字时才匹配。
更一般的做法是使用 \d{2}\b
,这样任何非字母数字值或空格都必须跟在后面。