我试图用以下规则解析论坛:
rules = (Rule(LinkExtractor(allow=(r'page-\d+$')), callback='parse_item', follow=True),)
我尝试过几种方法,在开始时使用/不使用r,在模式末尾使用/不使用$,等等。但是每次scrapy生成以等号结尾的链接,即使页面和模式中都没有=的链接。在
这里有一个提取链接的例子(同样使用parse_start_url,所以起始url也在这里,是的,我试图删除它-这没有帮助):
^{pr2}$如果我在浏览器中打开或者在垃圾外壳中获取这些链接,我会得到错误的页面,没有什么可以解析的,但是删除等号可以解决问题。在
那么为什么会发生这种情况,我该如何处理呢?在
编辑1(附加信息):
编辑2:
蜘蛛代码:
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.http import Request
class BmwclubSpider(CrawlSpider):
name = "bmwclub"
allowed_domains = ["www.bmwclub.ru"]
start_urls = []
start_url_objects = []
rules = (Rule(LinkExtractor(allow=(r'page-\d+$')), callback='parse_item'),)
def parse_start_url(self, response):
return Request(url = response.url, callback=self.parse_item, meta={'site_url': response.url})
def parse_item(self, response):
return []
收集链接的命令:
scrapy parse http://www.bmwclub.ru/index.php?threads/bamper-novyj-x6-torg-umesten-150000rub.1051898/ --noitems --spider bmwclub
命令的输出:
>>> STATUS DEPTH LEVEL 1 <<<
# Requests -----------------------------------------------------------------
[<GET http://www.bmwclub.ru/index.php?threads/bamper-novyj-x6-torg-umesten-150000rub.1051898/>,
<GET http://www.bmwclub.ru/index.php?threads%2Fbamper-novyj-x6-torg-umesten-150000rub.1051898%2Fpage-2=>,
<GET http://www.bmwclub.ru/index.php?threads%2Fbamper-novyj-x6-torg-umesten-150000rub.1051898%2Fpage-3=>]
这是因为规范化问题。在
您可以在
LinkExtractor
上禁用它,如下所示:相关问题 更多 >
编程相关推荐