#python-3.x #web-scraping #cookies #python-requests #scrapy
Вопрос:
Я пытаюсь извлечь данные из этого 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'
Комментарии:
1. Это называется геозонированием. Веб-сервер проверяет IP-адрес клиента, который подключается к нему, и сравнивает его со списком известных диапазонов IP-адресов, расположенных в этой стране. Вы не получите валюту евро, которую вы должны использовать через VPN или прокси. Если вы хотите использовать прокси-сервер, я помогу вам предоставить бесплатный скрипт прокси-сервера selenium.
2. @MuratDemir, пожалуйста, поделитесь сценарием. Также есть ли в любом случае возможность изменить валюту/страну локального компьютера, чтобы обойти это?
3. Вы можете сделать это снова с помощью прокси
4. @MuratDemir не могли бы вы поделиться своим сценарием?
5. Конечно, позволь мне подготовиться к тебе
Ответ №1:
Proxy nova-это бесплатный поставщик прокси-серверов, мы пытаемся получить адрес прокси-сервера с этого веб-сайта, прежде чем отправлять запрос. Я использовал селен, чтобы получить 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-адресу в Германии, после чего вы сможете снизить цены в евро.
Я не использовал запрос формы. Вы измените его в зависимости от вашего сценария.