[英]Scrapy: set cookies for a response (no from request)
我需要以美元货币提取一些工资,但我正在从另一个国家/地区访问该页面,那么显示的货币是当地(瑞尔)货币,没有美元。 所以,我发送 cookies 请求新货币和新国家
在设置中我有:
COOKIES_ENABLED = False
COOKIES_DEBUG = True
在我使用的蜘蛛中:
class HtSpider(scrapy.Spider):
name = 'sells'
allow_domain = ['hattrick.org']
def start_requests(self):
urls = ['https://www.hattrick.org']
for url in urls:
player = 'goto.ashx?path=/Club/Players/Player.aspx?playerId=450940600'
joint = urljoin(url, player)
yield scrapy.Request(
url=joint,
cookies={'currency': 'USD', 'country': 'US'},
# meta={'dont_merge_cookies': True},
dont_filter=True,callback=self.price)
def price(self,response):
price_xpath = response.xpath('//* [@id="transferHistory"]/table//tr[1]/td[6]/text()').extract_first()
print(price_xpath) // it is not in USD but in Riel :(
open_in_browser(response) // to check if it is in Riel or in USD
然后,从 cookies 调试我得到:
DEBUG: Sending cookies to: <GET https://www.hattrick.org/en/Club/Players/Player.aspx?playerId=450940600>
Cookie: currency=USD; country=US; currency=USD; country=US; ASP.NET_SessionId=xxxxx
2021-01-05 16:33:13 [scrapy.downloadermiddlewares.cookies] DEBUG: Received cookies from: <200 https://www.hattrick.org/en/Club/Players/Player.aspx?playerId=450940600>
Set-Cookie: InitialOrigin=Origin=direct|&DateSet=2021-01-05 10:33:13;
**Print price: 2 280 000 Riel**
如何获取我发送的请求而不是来自网站的请求的 cookies? 简而言之......如何获得美元而不是瑞尔?
首先,您是否使用 Postman 进行了测试,以确保它确实适用于这个 cookie?
如果你有COOKIES_ENABLED = False
那么 scrapy 不会将你的 cookies 发送到目标服务器。 由于您只向服务器发送一个请求,因此不会考虑来自服务器的 cookies。 所以设置COOKIES_ENABLED = True
应该可以解决它。
但是,如果您需要向服务器发送多个请求,那么这可能不起作用,因为来自服务器的set_cookies
标头可能会覆盖您的 cookie。
为了解决这个问题,我会设置COOKIES_ENABLED = False
。 然后像这样发送请求:
yield scrapy.Request(
url=joint,
headers={
'cookies': 'currency:USD;country:US'
}
dont_filter=True,callback=self.price)
我正在使用标题而不是 cookies 因为如果您在设置中禁用了 cookies ,则将考虑 cookies 字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.