Очистка URL-адресов продуктов под определенным почтовым индексом

#python #web-scraping #beautifulsoup #request

Вопрос:

Я пытаюсь очистить ссылки на товары под почтовым индексом 08041. Я написал код для очистки продуктов без почтового индекса, но не знаю, как очистить и отправить запрос на продукты под 08041?

Вот мой код:

 import requests
import random
import time
from bs4 import BeautifulSoup
import wget
import csv
from fp.fp import FreeProxy


def helloworld(url):
    r = requests.get(url)
    print ('Status',r.status_code)
    #time.sleep(8)
    soup = BeautifulSoup(r.content,'html.parser')
    post = soup.find_all('a',"name")
    
    for href in post:
        if ( href.get('href')[1] == 'p'):
            href = href.get('href')
            print (href)

def page_counter():
    url1 = "https://soysuper.com/c/aperitivos#products"
    print (url1,'n')
    helloworld(url1)
    
page_counter()
 

введите описание изображения здесь

введите описание изображения здесь

Ответ №1:

Вы можете использовать внутренние конечные точки для имитации запроса с заданным почтовым индексом.

Примечание: Файл cookie жестко закодирован, но действителен в течение года.

Вот как:

 import requests

headers = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.105 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest",
    "Cookie": "soysuper=eyJjYXJ0IjoiNjA2NWNkMzg5ZDI5YzkwNDU1NjI3MzYzIiwiZXhwaXJlcyI6MTY0ODg0MTMzOSwib3JpZCI6IkM2NzgwOUYyLTkyRUYtMTFFQi04NjNELTgzMTBCMUUwMTM2NiIsInNtIjoiIiwidXVpZCI6IkIwQjYxQzRFLTkyRUYtMTFFQi05MjRCLTA5MTFCMUUwMTM2NiIsIndoIjpbIjU0MDQ5MjEwMDk1Y2ZhNTQ2YzAwMDAwMCIsIjRmZjMwZTZhNTgzMmU0OGIwMjAwMDAwMCIsIjU5Y2JhZmE2OWRkNGU0M2JmMzIwODM0MiIsIjRmMzEyNzU4ZTNjNmIzMDAzMjAwMDAwMCIsIjVhMTZmNjdhMjUwOGMxNGFiMzE0OTY4MyIsIjYwMjQxNTEzNzIyZDZhNTZkNDZlMjhmNyIsIjRmZjMwZTJkYzI3ZTk1NTkwMjAwMDAwMSIsIjU5ZjcxYTZlNjI4YWIwN2UyYjJjZmJhMSIsIjU5Y2JhZjNjOWRkNGU0M2JmMzIwODM0MSIsIjVhMGU0NDFhNTNjOTdiM2UxNDYyOGEzNiIsIjRmMmJiZmI3ZWJjYjU1OGM3YjAwMDAwMCIsIjYwNDExZjJlNzIyZDZhMTEyZDVjYTNlYiIsIjViMWZmZjAyNzI1YTYxNzBjOTIxMjc0MSIsIjVlNzk2NWUwZDc5MTg3MGU0NTA1MGMwMCIsIjVkMTI0NDQ2OWRkNGU0NGFkMDU3MmMxMSJdLCJ6aXAiOiIwODA0MSJ9--166849121eece159a6fdb0c0fe8341032321d9b1;"
}
with requests.Session() as connection:
    r = connection.get("https://soysuper.com/supermarket?zipcode=08041", headers=headers)
    headers["Request-Id"] = r.headers["Next-Request-Id"]
    headers["Referer"] = "https://soysuper.com/c/aperitivos"
    products_data = connection.get("https://soysuper.com/c/aperitivos?products=1amp;page=1", headers=headers).json()
    print(products_data["products"]["total"])
 

Вывод: Общее количество товаров для почтового индекса 08041.

 2923
 

То, что вы эффективно получаете, — это JSON все данные о продукте для данной страницы. Вот как это выглядит на вкладке «Сеть».

введите описание изображения здесь

Обратите внимание на pager ключ. Используйте его для «разбиения на страницы» API и получения дополнительной информации о продукте.