comment faire pour remplacer / utiliser des cookies dans scrapy
Je veux ferraille http://www.3andena.com/, ce site web commence d'abord en arabe, et il stocke les paramètres de langue dans les cookies. Si vous avez essayé d'accéder à la version en langue directement via l'URL (http://www.3andena.com/home.php?sl=en), il fait un problème et de retour d'erreur du serveur.
Donc, je veux mettre la valeur du cookie "store_language" à "fr", puis commencer à la ferraille le site web à l'aide de cette valeur du cookie.
Je suis en utilisant CrawlSpider avec un couple de Règles.
voici le code
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy import log
from bkam.items import Product
from scrapy.http import Request
import re
class AndenaSpider(CrawlSpider):
name = "andena"
domain_name = "3andena.com"
start_urls = ["http://www.3andena.com/Kettles/?objects_per_page=10"]
product_urls = []
rules = (
# The following rule is for pagination
Rule(SgmlLinkExtractor(allow=(r'\?page=\d+$'),), follow=True),
# The following rule is for produt details
Rule(SgmlLinkExtractor(restrict_xpaths=('//div[contains(@class, "products-dialog")]//table//tr[contains(@class, "product-name-row")]/td'), unique=True), callback='parse_product', follow=True),
)
def start_requests(self):
yield Request('http://3andena.com/home.php?sl=en', cookies={'store_language':'en'})
for url in self.start_urls:
yield Request(url, callback=self.parse_category)
def parse_category(self, response):
hxs = HtmlXPathSelector(response)
self.product_urls.extend(hxs.select('//td[contains(@class, "product-cell")]/a/@href').extract())
for product in self.product_urls:
yield Request(product, callback=self.parse_product)
def parse_product(self, response):
hxs = HtmlXPathSelector(response)
items = []
item = Product()
'''
some parsing
'''
items.append(item)
return items
SPIDER = AndenaSpider()
Voici le log :
2012-05-30 19:27:13+0000 [andena] DEBUG: Redirecting (301) to <GET http://www.3andena.com/home.php?sl=en&xid_479d9=97656c0c5837f87b8c479be7c6621098> from <GET http://3andena.com/home.php?sl=en>
2012-05-30 19:27:14+0000 [andena] DEBUG: Redirecting (302) to <GET http://www.3andena.com/home.php?sl=en&xid_479d9=97656c0c5837f87b8c479be7c6621098> from <GET http://www.3andena.com/home.php?sl=en&xid_479d9=97656c0c5837f87b8c479be7c6621098>
2012-05-30 19:27:14+0000 [andena] DEBUG: Crawled (200) <GET http://www.3andena.com/Kettles/?objects_per_page=10> (referer: None)
2012-05-30 19:27:15+0000 [andena] DEBUG: Crawled (200) <GET http://www.3andena.com/B-and-D-Concealed-coil-pan-kettle-JC-62.html> (referer: http://www.3andena.com/Kettles/?objects_per_page=10)
OriginalL'auteur Mahmoud M. Abdel-Fattah | 2012-05-19
Vous devez vous connecter pour publier un commentaire.
modifier vos codes ci-dessous:
Scrapy.Objet demande accepte facultatif
cookies
argument mot-clé, voir la documentation iciOriginalL'auteur iefreer
C'est la façon dont je le fais aussi de Scrapy 0.24.6:
Scrapy appels
make_requests_from_url
avec les Url dans lestart_urls
attribut de l'araignée. Ce que le code ci-dessus est en train de faire est de laisser la valeur par défaut de mise en œuvre de créer la demande et à l'ajout d'unefoo
cookie qui a de la valeurbar
. (Ou en changeant le réglage de la valeurbar
si, contre toute attente, qu'il y a déjà unfoo
cookie sur la demande produite par le défaut de mise en œuvre.)Dans le cas où vous vous demandez ce qui se passe avec les demandes qui sont pas créé à partir de
start_urls
, permettez-moi d'ajouter que Scrapy cookie middleware souvenez-vous le témoin set avec le code ci-dessus et de le mettre sur toutes les futures demandes qui partagent le même domaine que la demande à laquelle vous avez ajouté votre cookie.OriginalL'auteur Louis
Directement à partir de la Scrapy de la documentation pour les Demandes et les Réponses.
Vous aurez besoin de quelque chose comme ce
Pourriez-vous mettre votre code source?
Je viens de l'ajouter
Je viens de remarquer que le site web stocke la valeur de la langue dans
'store_language'
et pas dans'store_lang'
. J'ai édité l'original de la réplique. Accepter si cela fonctionne.Je l'ai essayé, mais ça ne fonctionne pas. Et a ajouté le journal à ma question. Merci beaucoup pour garder sur le soutien BTW
OriginalL'auteur VenkatH