【问题标题】:Using cookies to alter currency with scrapy request使用cookies通过scrapy请求改变货币
【发布时间】:2021-04-25 14:29:41
【问题描述】:

我正在尝试从此url 中提取数据。下面是我为完成这项工作而编写的代码。

cookies = {'.AspNetCore.Antiforgery.M6FGfmlbnTQ': 'CfDJ8A-eCRip5cVAs8-wkFU1H8dmFA0OIoxp6pQh1dcRvnpdNHKpKwFF2EhHSg5c-yqb-DriS6AIiwgnIpzyMiiphd42Un2v0-X6l8ePR4KkjG_CR2a_u6qrFOZNrRg0jrhliPOhyV6TKCtu6k-rn92lVMI',
 'uCurr': 'EUR'}

header = {'User-Agent': 'APIs-Google (+https://developers.google.com/webmasters/APIs-Google.html)',
 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
 'X-Requested-With': 'XMLHttpRequest'}

formdata = {'query': 'AR-LCAAAAAAAAApNjr0KwkAQhN9l6gvsXn5M1iqohZUSkweImqjgD6LYhLy7c0UgcMUcM7PzDXjBBrSwRByOMHjxGkkWSVKrmggfHE4zR3XunGGxjwuHbhI9LE8K73CZxJXtVblm-ka1aSqqO8znDg-YZqkLGBo7vOmL0m7DYveMmgM_Hx7imS8rWpDzB1swQmqU22q_q-rQCPSBYBlGw0IqzOk4_gFLkZV45QAAAA2',
 'discount': 'AG51bGw1',
 '__RequestVerificationToken': 'CfDJ8A-eCRip5cVAs8-wkFU1H8fDgaTCPGKJ6FVhqBSItqEvJHfZlsE0bsh4EKYxRKIpb3CDhue0bRj0jOgsLjyHTIvvEolzWwGt1CDfRlgnXrfO8NZiEE3ZQhIyeVShd5-AxG-QhQp4zSE3WeWo7Fr40DI'}

url = 'https://www.carflexi.com/data/getDeals'

In [47]: fetch(scrapy.FormRequest(url, method='POST', headers=header, formdata=formdata,cookies = cookies))                                           
2021-04-25 19:21:11 [scrapy.core.engine] DEBUG: Crawled (200) <POST https://www.carflexi.com/data/getDeals> (referer: None)

问题在于货币参数不起作用。我正在尝试以EUR 获取数据,但它以我的当地货币为我提供了输出。

In [48]: deal = json.loads(response.text).get('result').get('deals')[0] 
In [49]: deal.get('priceString')                                                                                                                      
Out[49]: '57,622'

【问题讨论】:

  • 这称为地理围栏。 Web 服务器正在检查连接到它的客户端的 IP 地址,并将其与位于该国家/地区内的已知 IP 范围列表进行比较。您不会获得必须使用 VPN 或代理的欧元货币。如果你想使用代理,我会帮你提供一个免费的 selenium 代理脚本。
  • @MuratDemir 请分享脚本。还有是否可以更改本地计算机的货币/国家来解决这个问题?
  • 你可以再用代理来做
  • @MuratDemir 你能分享你的脚本吗?
  • 当然让我为你准备

标签: python-3.x web-scraping cookies python-requests scrapy


【解决方案1】:

Proxy nova 是一个免费的代理提供商,我们试图在产生请求之前从该网站获取代理地址。我使用 selenium 来获取代理 IP。

import scrapy
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
class CarflexiSpider(scrapy.Spider):
    name = 'carflexi'
    allowed_domains = ['www.carflexi.com']
    start_urls = ['https://www.carflexi.com/data/getDeals']

    def __init__(self):
        self.proxy_adress_is = self.proxy_adress()

    def proxy_adress(self):
        url = "https://www.proxynova.com/proxy-server-list/country-de/"
        opts = Options()
        opts.add_argument('--headless')
        driver = webdriver.Chrome(options=opts,executable_path="chromedriver")
        driver.get(url)
        time.sleep(3)
        proxy_ip = driver.find_element_by_xpath('//*[@id="tbl_proxy_list"]/tbody[1]/tr[1]/td[1]/abbr').text
        proxy_ip = proxy_ip.replace(",","").strip()
        proxy_port = driver.find_element_by_xpath('//*[@id="tbl_proxy_list"]/tbody[1]/tr[1]/td[2]').text
        proxy_port = proxy_port.replace(",","").strip()
        driver.close()
        return proxy_ip+":"+proxy_port

    def parse(self, response):
        url = 'https://www.carflexi.com/data/getDeals'
        request = scrapy.Request(
                url, callback=self.parse_product)
        request.meta['proxy'] = self.proxy_adress_is
        yield request

    def parse_product(self,response):
        pass

proxy_adress 功能可让您连接到德国 IP,然后您可以获取欧元价格。

我没有使用表单请求。您将根据您的脚本对其进行更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多