2017-11-22 2 views
0

Wenn es ein base Tag in HTML gibt, werden die relativen Links unterschiedlich gerendert. Wir erwarteten Link Extractors class in scrapy, um es automatisch zu behandeln. Aber das scheint nicht zu geschehen.Scrapy Link Extractors unterstützt keine Basistag

Was wäre der Standard-Scrapy-Weg, um dieses Problem zu lösen?

+0

Sie die 'tags' init Argument versucht haben, in der' LinkExtractor' Klasse? – Wilfredo

+0

@ Wilfredo - Ich habe es versucht und es hat funktioniert. Scheint das Problem ist anders, es nimmt nur erste 4096 Zeichen in HTML, um nach Basis-Tag zu überprüfen. Und in unserem Fall ist es viel darunter? Irgendwelche Gedanken über das gleiche –

+0

Found das Problem - https://github.com/scrapy/scrapy/issues/3017 –

Antwort

1

könnten Sie wahrscheinlich versuchen Sie Folgendes:

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) 

Hinweis: ungetesteten Code