Migrostan veri çekmek

Youtubedan videolar izleyerek veri çekmeye çalışıyorum ama migrosun sitesinden verileri çekemiyorum. Trendyol gibi başka siteleri denediğimde çekebildim. Migrosun neden çekemiyorum yanlış birşeyler mi yapıyorum.
Çekmeye çalıştığım yer resimde gösterdiğim yer ama En sondaki ürünler [ ] boş liste olarak geliyor.

import requests
from bs4 import BeautifulSoup

import pandas as pd

r= requests.get(“https://www.migros.com.tr/”)
r.content
soup = BeautifulSoup(r.content,“lxml”)

soup.prettify()
print(soup)
ürünler = soup.find_all(“div” ,attrs={“class” :“ng-tns-c387-5”})
print(“ürünler”,ürünler)
print(len(ürünler))

sitenin içeriği javascript ile dolduğundan html içeriğini alamıyorsun. (kullandığın requests kütüphanesi javascript renderlayamıyor. kısacası gerçek bir tarayıcı gerekli.)

şurayı okursan rahatça yapabilirsin.

1 Beğeni

Teşekkür ederim hemen inceliyorum.

Hocam sizin paylaştığınızı inceledim 3 gün önce daha kapsamlı bir paylaşım yapmışsınız onu da inceledim. Üzerinde uğraştım ama en son uygulama “KeyError” veriyor.
Hatanın “for urun in jsonify[“searchInfo”]:” buradan olduğunu düşünerek “searcInfo” yerine “storeProductInfos” , “0” olarak da denedim gene hata alıyorum bunun sebebi ne olabilir ?

Ürün adı giriniz: sabun
Traceback (most recent call last):
File “C:\Users\ADMIN\PycharmProjects\vericekme\main.py”, line 32, in
data = Migros(urun_input).parse_urunler()
File “C:\Users\ADMIN\PycharmProjects\vericekme\main.py”, line 20, in parse_urunler
for urun in jsonify[“searchInfo”]:
KeyError: ‘searchInfo’



migros2



Yazdığım Kodlar Aşağıdaki gibidir.

import requests
import json

class Migros:
def init(self, urun_adi):
self.urun_adi = urun_adi

def get_urunler(self):
    data = {
        "q": self.urun_adi
    }
    r = requests.get("https://www.migros.com.tr/rest/search/screens/products", params=data)
    return r.text

def parse_urunler(self):
    urunler = self.get_urunler()
    jsonify = json.loads(urunler)
    results = []
    for urun in jsonify["searchInfo"]:
        result = {}
        result["urun_adi"] = urun["name"]
        result["urun_fiyati"] = urun["loyaltyPrice"]
        result["urun_indirimli_fiyati"] = urun["salePrice"]

        results.append(result)
    return results

if name == “main”:
urun_input = input(“Ürün adı giriniz: “)
data = Migros(urun_input).parse_urunler()
print(”–SORGU SONUCU GELEN ÜRÜN BİLGİLERİ–”)
for i in data:
print(
f"URUN Adı: {i[‘urun_adi’]}\n Ürün Fiyatı: {i[‘urun_fiyati’]}\n ÜRÜN İndirimli Fiyatı: {i[‘urun_indirimli_fiyatı’]}")

Doğru sayfaya ulaşıp ulaşamadığını bi kontrol et istersen “reid” değerini girmediğin için yanlış sayfaya gidiyo olabilirsin

çok anlamıyorum daha yeni yeni başladığım için bu söylediğiniz şeyi nereden kontrol edebilirim

tarayıcıda kontrol ettiğin yanıtla

aynı mı diye kontrol etmek için print et aynıysa sorun yok ama değilse sorun yüksek ihtimal reid den kaynaklanıyodur

Aramayı başarlı olarak döndürmesine rağmen verdiği yanıt boş buarada aldığın hatanın sebebi önce “data” nın içine girmen gerekiyo onun içinde “searchInfo”.
Neden boş bilgi döndürdüğünüde anlıyamadım belki migros bir şekilde engelliyordur

{'successful': True, 'data': {'searchInfo': {'pageCount': 0, 'hitCount': 0, 'storeProductInfos': [], 'sortCriteria': [], 'aggregationGroups': [], 'attributeAggregations': [], 'categoryAggregations': [], 'tagAggregations': [], 'discountAggregations': [], 'brandAggregations': []}, 'companyBasedProductRecommendationInfo': {'pageMetaData': {'breadcrumbs': []}, 'storeProductInfos': []}, 'bannersMap': {}, 'searchQuery': '?query=q', 'metaInfo': {'title': 'Arama', 'breadcrumbs': [{'label': 'Arama'}], 'seoTitle': 'Arama - Migros'}, 'eventInfo': {'eventId': 1664618369775023897, 'screenName': 'Search'}, 'productRecommendationInfo': {'storeProductInfos': [], 'pageMetaData': {'breadcrumbs': []}}}}

Evet bir kaç tane daha başka sitede denedim onlarda sıkıntı yok ama MİGROS ta nedense cekemiyorum

hocam key_error dediğimiz şey gelen json verisinin içinde bahsedilen key’in bulunmuyor olması demek.
detaylı bilgi: JSON Literals

debugger ile ya da gelen sonucu printleyerek neler geldiğine bakıp oradan bir yol izlerseniz işiniz kolaylaşacaktır.

1 Beğeni