废链接提取器添加等号到链接的结尾

2024-06-16 13:35:35 发布

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

我试图用以下规则解析论坛:

rules = (Rule(LinkExtractor(allow=(r'page-\d+$')), callback='parse_item', follow=True),)

我尝试过几种方法,在开始时使用/不使用r,在模式末尾使用/不使用$,等等。但是每次scrapy生成以等号结尾的链接,即使页面和模式中都没有=的链接。在

这里有一个提取链接的例子(同样使用parse_start_url,所以起始url也在这里,是的,我试图删除它-这没有帮助):

^{pr2}$

如果我在浏览器中打开或者在垃圾外壳中获取这些链接,我会得到错误的页面,没有什么可以解析的,但是删除等号可以解决问题。在

那么为什么会发生这种情况,我该如何处理呢?在

编辑1(附加信息):

  1. 皮屑1.0.3
  2. 其他爬行蜘蛛也不错。在

编辑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=>]

Tags: httpurlindexparse链接responsewwwru
1条回答
网友
1楼 · 发布于 2024-06-16 13:35:35

这是因为规范化问题。在

您可以在LinkExtractor上禁用它,如下所示:

rules = (
    Rule(LinkExtractor(allow=(r'page-\d+$',), canonicalize=False), callback='parse_item'),
)

相关问题 更多 >