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