scope python находит рекурсивные ссылки href

0 florecitas [2017-01-26 13:00:00]

Я пытаюсь сделать scrapy, чтобы найти и распечатать все href с начальной страницы:

class Ejercicio2(scrapy.Spider):
    name = "Ejercicio2"
    Ejercicio2 = {}
    category = None
    lista_urls =[] #defino una lista para meter las urls

def __init__(self, *args, **kwargs):
    super(Ejercicio2, self).__init__(*args, **kwargs)
    self.start_urls = ['http://www.masterdatascience.es/']
    self.allowed_domains = ['www.masterdatascience.es/']
    url = ['http://www.masterdatascience.es/']


def parse(self, response):
    print(response)
    # hay_enlace=response.css('a::attr(href)')
    # if hay_enlace:
    links = response.xpath("a/@href")
    for el in links:
        url = response.css('a::attr(href)').extract()
        print(url)
        next_url = response.urljoin(el.xpath("a/@href").extract_first())
        print(next_url)
        print('pasa por aqui')
        yield scrapy.Request(url, self.parse())
        # yield scrapy.Request(next_url, callback=self.parse)
        print(next_url)

Но работает не так, как ожидалось, не следуя найденным "href" ссылкам, а только первым.

python href scrapy


2 ответа


0 nevster [2017-01-30 01:25:00]

приведенный ниже код будет распечатывать все href на странице:

import scrapy

class stackoverflow20170129Spider(scrapy.Spider):
    name = "stackoverflow20170129"
    allowed_domains = ["masterdatascience.es"]
    start_urls = ["http://www.masterdatascience.es/",]

    def parse(self, response):
        for href in response.xpath('//a/@href'):
           url = response.urljoin(href.extract())
           print url
#           yield scrapy.Request(url, callback=self.parse_dir_contents)

одна вещь также: стоит отказаться от www. из "allowed_domains" - если вы пойдете глубже на сайт и начнете получать страницы, такие как anewpage.masterdatascience.es, а затем www. заблокирует эту страницу


-2 arno [2017-01-26 13:13:00]

Вы можете попробовать изменить свой xpath на //a/@href