0
HTMLにbaseタグがある場合、相対リンクは異なる方法でレンダリングされます。我々はそれを自動的に処理するために、治療でLink Extractors classが期待されました。しかし、それは起こっていないようです。Scrapy Link Extractorsはベースタグをサポートしていません
この問題を解決するための標準的な治療方法は何でしょうか?
HTMLにbaseタグがある場合、相対リンクは異なる方法でレンダリングされます。我々はそれを自動的に処理するために、治療でLink Extractors classが期待されました。しかし、それは起こっていないようです。Scrapy Link Extractorsはベースタグをサポートしていません
この問題を解決するための標準的な治療方法は何でしょうか?
あなたは、おそらく次のように試みることができる:
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)
注:未テストコード
あなたは 'LinkExtractor'クラスの' tags'のinit引数を試してみましたか? – Wilfredo
@ Wilfredo-私は試してみました。問題は異なっていると思われます.HTMLの最初の4096文字はベースタグをチェックするだけです。そして、私たちの場合、それはずっと下でしょうか?同一の考えがある –
問題が見つかりました - https://github.com/scrapy/scrapy/issues/3017 –