Python Scrapy:为响应设置Cookie(请求没有)
我需要提取一些美元货币的工资,但我正在访问另一个国家的网页,然后,显示的货币是当地(瑞尔)一个,没有美元。所以,我发送cookies请求一种新的货币和一个新的国家 在设置中,我有:Python Scrapy:为响应设置Cookie(请求没有),python,cookies,scrapy,request,response,Python,Cookies,Scrapy,Request,Response,我需要提取一些美元货币的工资,但我正在访问另一个国家的网页,然后,显示的货币是当地(瑞尔)一个,没有美元。所以,我发送cookies请求一种新的货币和一个新的国家 在设置中,我有: COOKIES_ENABLED = False COOKIES_DEBUG = True 在我使用的蜘蛛中: class HtSpider(scrapy.Spider): name = 'sells' allow_domain = ['hattrick.org'] def start_re
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;
DEBUG:将cookie发送到:
Cookie:货币=美元;国家=美国;货币=美元;国家=美国;ASP.NET_SessionId=xxxxx
2021-01-05 16:33:13[scrapy.downloadermiddleware.cookies]调试:从以下地址接收cookies:
设置Cookie:InitialOrigin=Origin=direct |&DateSet=2021-01-05 10:33:13;
**打印价格:2280000瑞尔**
如何获取我在请求中发送的cookie,而不是从网站获取的cookie?简言之如何获得美元而不是瑞尔?首先,您是否与邮递员进行了测试,以确保它确实适用于这种饼干 如果您启用了
COOKIES\u=False
,则scrapy不会将您的COOKIES发送到目标服务器。由于您只向服务器发送一个请求,因此不会考虑来自服务器的cookie。所以设置COOKIES\u ENABLED=True
应该可以解决这个问题
但是,如果您需要向服务器发送多个请求,那么这可能不起作用,因为来自服务器的set\u cookies
头可能会覆盖您的cookie
为了解决这个问题,我将设置COOKIES\u ENABLED=False
。
然后发送如下请求:
yield scrapy.Request(
url=joint,
headers={
'cookies': 'currency:USD;country:US'
}
dont_filter=True,callback=self.price)
我建议使用标题而不是cookies,因为如果您在设置中禁用了cookies,那么cookies字段将被考虑。Hi@felix eklöf,谢谢您的回答。我尝试了
Cookies\u enable
(False和True)的两个选项,也尝试了标题,但问题仍然存在。我可以发送Cookies,但它们不会覆盖服务器上的Cookies。还有其他建议吗?我会仔细看看这个网站,即使我在网站上把语言改成en-US,我仍然可以用我的当地货币支付工资。我在任何地方都找不到你附加的标题,你在哪里找到的?在我看来,服务器似乎是在服务器端进行地理定位。有时,您可以使用Accept Language标头绕过此操作,但它不适用于此服务器。我能想到的唯一选择是使用代理API和我们geotargeting.Hi Felix。是的,我和邮递员查过了,它是地理定位的。我将按照您的建议使用代理API进行检查。