Scrapy Link Extractors不支持基本标记

时间:2017-11-22 13:55:43

标签: python scrapy scrapy-spider

如果HTML中有base标记,则相对链接的呈现方式不同。我们期望scrapy中的Link Extractors class能够自动处理它。但似乎没有发生。

解决这个问题的标准scrapy方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

from scrapy.linkextractors.lxmlhtml import LxmlLinkExtractor
from scrapy.utils.response import _baseurl_cache
from w3lib import html


def set_base_url(response, base_tag_search_length):
    if response not in _baseurl_cache:
        text = response.text[0:base_tag_search_length]
        _baseurl_cache[response] = html.get_base_url(text, response.url,
                                                     response.encoding)


class CustomLinkExtractor(LxmlLinkExtractor):
    some_other_arbitrary_length = 4096*4

    def extract_links(self, response):
        set_base_url(response, self.some_other_arbitrary_length)
        return super(CustomLinkExtractor, self).extract_links(response)

注意:未经测试的代码