2017-11-22 12 views
0

HTMLにbaseタグがある場合、相対リンクは異なる方法でレンダリングされます。我々はそれを自動的に処理するために、治療でLink Extractors classが期待されました。しかし、それは起こっていないようです。Scrapy Link Extractorsはベースタグをサポートしていません

この問題を解決するための標準的な治療方法は何でしょうか?

+0

あなたは 'LinkExtractor'クラスの' tags'のinit引数を試してみましたか? – Wilfredo

+0

@ Wilfredo-私は試してみました。問題は異なっていると思われます.HTMLの最初の4096文字はベースタグをチェックするだけです。そして、私たちの場合、それはずっと下でしょうか?同一の考えがある –

+0

問題が見つかりました - https://github.com/scrapy/scrapy/issues/3017 –

答えて

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) 

注:未テストコード

関連する問題