Изменение языка парсинга

Я следую курсу. Оно немного устарело, поэтому на сайте кое-что изменилось. https://www.centris.ca/

По сути, это сайт недвижимости, вам нужно вызвать в 2 конечные точки, чтобы получить результат с объектами недвижимости.

Звоните 1: https://www.centris.ca/property/UpdateQuery

Звонок 2: https://www.centris.ca/Property/GetInscriptions

К сожалению, я не могу понять, как не вернуть ответ на французском языке. Вещи, которые я пробовал:

заголовки: 'Accept-Language': 'en-US,en;q=0.6'

Файлы cookie: ничего, что указывает на язык.

Паук:

import scrapy
from scrapy.selector import Selector
import json


class ListingsSpider(scrapy.Spider):
    name = "listings"
    allowed_domains = ["www.centris.ca"]

    position = {
        "startPosition": 0
    }

    def start_requests(self):
        query = {
            "query":{
                "UseGeographyShapes":0,
                "Filters":[
                    
                ],
                "FieldsValues":[
                    {
                        "fieldId":"Category",
                        "value":"Commercial",
                        "fieldConditionId":"",
                        "valueConditionId":""
                    },
                    {
                        "fieldId":"SellingType",
                        "value":"Rent",
                        "fieldConditionId":"",
                        "valueConditionId":""
                    },
                    {
                        "fieldId":"RentPrice",
                        "value":0,
                        "fieldConditionId":"ForRent",
                        "valueConditionId":""
                    },
                    {
                        "fieldId":"RentPrice",
                        "value":999999999999,
                        "fieldConditionId":"ForRent",
                        "valueConditionId":""
                    }
                ]
            },
            "isHomePage": True
        }
        yield scrapy.Request(
            url = "https://www.centris.ca/property/UpdateQuery",
            method = "POST",
            body=json.dumps(query),
            headers = {
                'Content-Type': 'application/json',
                'Content-Language': 'en'
            },
            callback=self.update_query
        )


    def update_query(self, response):
        yield scrapy.Request(
            url = "https://www.centris.ca/Property/GetInscriptions",
            method = "POST",
            body=json.dumps(self.position),
            headers = {
                'Content-Type': 'application/json',
                'accept-language': 'en-US,en;q=0.6',
                'referer': 'https://www.centris.ca/en/properties~for-rent?view=Thumbnail',
                'cache-control': 'no-cache'
            },
            cookies = {'currency': 'USD', 'country': 'UY'},
            callback=self.parse
        )

    def parse(self, response):
       resp_dict = json.loads(response.body)
       html = resp_dict.get('d').get('Result').get('html')
       sel = Selector(text=html)
       listings = sel.xpath("//div[@class='property-thumbnail-item thumbnailItem col-12 col-sm-6 col-md-4 col-lg-3']")
       for listing in listings:
         print("not yet implemented")

Обновлено: я очищаю API, а не сам веб-сайт.

Если зайти на сайт и выбрать английский язык, я получу URL-адреса типа centris.ca/en?uc=1

tripleee 24.06.2024 11:55

«Я парсинг API, а не самого сайта». Тогда это не совсем царапание, не так ли?

tripleee 24.06.2024 12:04

Дальнейшие исследования показывают, что большая часть контента доступна только на французском языке.

tripleee 24.06.2024 12:06

Язык ответа, похоже, не основан на заголовке Accept-Language, и я сомневаюсь, что они оценивают реферер, чтобы определить это. Скорее всего, выбранный язык будет храниться в сессии здесь, я полагаю.

CBroe 24.06.2024 12:10
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Выбранный язык сохраняется в сеансе на сервере, вам необходимо отправить текущий файл cookie, чтобы получить данные выбранного языка.

Вам нужно реорганизовать поток:

Прежде всего вызовите centris.ca/en?uc=0, чтобы установить текущий языковой стандарт EN, затем сохраните файл cookie в ответ на локальный стандарт.

Затем отправьте сохраненный файл cookie в вызове: https://www.centris.ca/property/UpdateQuery , https://www.centris.ca/Property/GetInscriptions

Спасибо, не знал о хранении сеансов.

gary rizzo 24.06.2024 12:50

Другие вопросы по теме