如果HTML中有base标记,则相对链接的呈现方式不同。我们期望scrapy中的Link Extractors class能够自动处理它。但似乎没有发生。
解决这个问题的标准scrapy方法是什么?
答案 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)
注意:未经测试的代码