scrapy - comment arrêter de Redirection (302)
Je suis en train d'analyser une url à l'aide de Scrapy. Mais il me redirige vers la page qui n'existe pas.
Redirecting (302) to <GET http://www.shop.inonit.in/mobile/Products/Inonit-Home-Decor--Knick-Knacks-Cushions/Shor-Sharaba/Andaz-Apna-Apna-Cushion-Cover/1275197> from <GET http://www.shop.inonit.in/Products/Inonit-Home-Decor--Knick-Knacks-Cushions/Shor-Sharaba/Andaz-Apna-Apna-Cushion-Cover/pid-1275197.aspx>
Le problème est http://www.shop.inonit.in/Products/Inonit-Home-Decor--Knick-Knacks-Cushions/Shor-Sharaba/Andaz-Apna-Apna-Cushion-Cover/pid-1275197.aspx existe, mais http://www.shop.inonit.in/mobile/Products/Inonit-Home-Decor--Knick-Knacks-Cushions/Shor-Sharaba/Andaz-Apna-Apna-Cushion-Cover/1275197 n'est pas, de sorte que le robot ne peux pas le trouver. J'ai analysé de nombreux autres sites mais je n'avais pas ce problème n'importe où ailleurs. Est-il un moyen que je puisse arrêter cette redirection?
Toute aide serait grandement appréciée. Merci.
Mise à jour: C'est mon araignée classe
class Inon_Spider(BaseSpider):
name = 'Inon'
allowed_domains = ['www.shop.inonit.in']
start_urls = ['http://www.shop.inonit.in/Products/Inonit-Gadget-Accessories-Mobile-Covers/-The-Red-Tag/Samsung-Note-2-Dead-Mau/pid-2656465.aspx']
def parse(self, response):
item = DealspiderItem()
hxs = HtmlXPathSelector(response)
title = hxs.select('//div[@class="aboutproduct"]/div[@class="container9"]/div[@class="ctl_aboutbrand"]/h1/text()').extract()
price = hxs.select('//span[@id="ctl00_ContentPlaceHolder1_Price_ctl00_spnWebPrice"]/span[@class="offer"]/span[@id="ctl00_ContentPlaceHolder1_Price_ctl00_lblOfferPrice"]/text()').extract()
prc = price[0].replace("Rs. ","")
description = []
item['price'] = prc
item['title'] = title
item['description'] = description
item['url'] = response.url
return item
OriginalL'auteur user_2000 | 2013-03-18
Vous devez vous connecter pour publier un commentaire.
oui, vous pouvez le faire simplement par l'ajout de méta-valeurs comme
aussi, vous pouvez arrêter redirigé pour un code de réponse comme
il va arrêter de nous envoyer uniquement 302 codes de réponse.
exemple
Vous pouvez appeler hxs = HtmlXPathSelector(réponse) avec vous rediriger aurait pour tester la réponse.status ==302 et faire un autre type de traitement. Le hxs dans ce cas va échouer car la réponse.le corps est vide pour le statut 302
Quelqu'un a testé? il ne fonctionne pas avec le courant de scrapy version, j'ai testé avec
'handle_httpstatus_list': [404, 301]
juste 404 œuvresIl s'arrête de redirection, mais il n'a pas également l'analyse de contenu à partir de la donnée de pages aussi, toutes les solutions?
Vous pouvez placer ce code dans start_requests méthode en toile de classe. Quand l'araignée est exécuté d'abord commencer dans la méthode init, puis aller à start_requests et dans ce point de la demande n'a pas envoyer encore. Vous pouvez mettre ceci:
request = Request(url=self.start_urls[0], callback=self.parse) request.meta['dont_redirect'] = True return [request]
et alors il enverra la demande et si elle est ok pour aller à analyser la méthode ou la méthode de rappel.OriginalL'auteur akhter wahab
Par défaut, Scrapy utilisation
RedirectMiddleware
pour gérer la redirection. Vous pouvez définirREDIRECT_ENABLED
à False pour désactiver la redirection.Voir la documentation.
OriginalL'auteur imwilsonxu
Après avoir regardé la la documentation et à la recherche par le biais de la source, j'ai été en mesure de le comprendre. Si vous recherchez dans la source pour start_requests, vous verrez qu'il appelle make_requests_from_url pour toutes les Url.
Au lieu de modifier start_requests, j'ai modifié make_requests_from_url
Et a ajouté ceci dans le cadre de mon araignée, juste au-dessus de
parse()
.Cela fonctionne pour moi. Merci.
Belle solution pour le site je veux travailler avec. Merci!
OriginalL'auteur Chad Casey
Comme expliqué ici: Scrapy docs
De Demande D'Utilisation De Méta
OriginalL'auteur Evhz