Estoy trabajando en el rastreo de un sitio y estoy usando LinkExtractor de scrapy para rastrear enlaces y determinar su estado de respuesta.

Además, también quiero usar Link Extractor para obtener src de imágenes del sitio. Tengo un código y funciona bien con las URL de los sitios, pero parece que no puedo obtener las imágenes. ya que no iniciará sesión en la consola.

handle_httpstatus_list = [404,502]
# allowed_domains = [''mydomain']

start_urls = ['somedomain.com/']

http_user = '###'
http_pass = '#####'

rules = (
    Rule(LinkExtractor(allow=('domain.com',),canonicalize = True, unique = True), process_links='filter_links', follow = False, callback='parse_local_link'),
    Rule(LinkExtractor(allow=('cdn.domain.com'),tags = ('img',),attrs=('src',),canonicalize = True, unique = True), follow = False, callback='parse_image_link'),
)

def filter_links(self,links):
    for link in

def parse_local_link(self, response):
    if response.status != 200:
        item = LinkcheckerItem()
        item['url'] = response.url
        item['status'] = response.status
        item['link_type'] = 'local'
        item['referer'] = response.request.headers.get('Referer',None)
        yield item

def parse_image_link(self, response):
    print "Got image link"
    if response.status != 200:
        item = LinkcheckerItem()
        item['url'] = response.url
        item['status'] = response.status
        item['link_type'] = 'img'
        item['referer'] = response.request.headers.get('Referer',None)
        yield item
2
Vincent Pakson 14 nov. 2017 a las 13:42

2 respuestas

La mejor respuesta

En caso de que alguien esté interesado en seguir usando CrawlSpider con LinkExtractor s, simplemente agregue el kwarg deny_extensions, es decir, reemplace:

    Rule(LinkExtractor(allow=('cdn.domain.com'),tags = ('img',),attrs=('src',),canonicalize = True, unique = True), follow = False, callback='parse_image_link'),

Con

    Rule(LinkExtractor(allow=('cdn.domain.com'),deny_extensions=set(), tags = ('img',),attrs=('src',),canonicalize = True, unique = True), follow = False, callback='parse_image_link')

Cuando este parámetro no está configurado, el valor predeterminado es scrapy.linkextractors.IGNORED_EXTENSIONS, que contiene jpeg, png y otras extensiones. Esto significa que el extractor de enlaces evita los enlaces encontrados que contienen dichas extensiones.

3
pwoolvett 4 may. 2018 a las 01:30

He estado usando Scarpy durante más de 2 años y siempre uso el método start_requests() para comenzar a raspar URL en lugar de start_urls y LinkExtractor

En lugar de confundirse con lo anterior, simplemente use este

class MySpider(scrapy.Spider):
    name = "myspider"

    def start_requests(self):

        urls_to_scrape = ["abc.com", "abc.com2"]

        for url in urls_to_scrape:

            yield Request(url=url, callback=self.my_callback)


    def my_callback(self, response):

        for img in response.css("img"):

            image_here = img.css("::attr(src)").extract_first()
1
Umair 14 nov. 2017 a las 15:34