Почему мой веб-код не извлекает данные, как следует? - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь получить данные с интернет-магазина покупок. Мой код работает без ошибок, но данные не извлекаются в CSV-файл, как это должно быть. Где я ошибаюсь с кодом?

from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd

driver = webdriver.Chrome("/usr/bin/chromedriver")

products=[] #List to store name of the product
prices=[] #List to store price of the product
ratings=[] #List to store rating of the product
driver.get("https://www.flipkart.com/lenovo-core-i3-6th-gen-4-gb-1-tb-hdd-windows-10-home-ip-320e-laptop/p/itmf3s32ghxrkrhf?pid=COMEWM7FTAQ9EHRF&srno=b_1_2&otracker=browse&lid=LSTCOMEWM7FTAQ9EHRFBL70ZV&fm=organic&iid=90098c10-e53b-49dc-9359-ff04338c0c4e.COMEWM7FTAQ9EHRF.SEARCH&ssid=2d6xzladk00000001572540087124")

content = driver.page_source
soup = BeautifulSoup(content)
for a in soup.findAll('a',href=True, attrs={'class':'_29OxBi'}):
    name = a.find('div', attrs={'class':'_35KyD6'})
    price = a.find('div', attrs={'class':'_1vC4OE _3qQ9m1'})
    rating= a.find('div', attrs={'class':'hGSR34'})
    products.append(name.text)
    prices.append(price.text)
    ratings.append(rating.text)

df = pd.DataFrame({'Product Name':products,'Price':prices,'Rating':ratings})
df.to_csv('products.csv', index=False, encoding='utf-8')

Я ожидаю, что код вернет данные, такие как название, цена и рейтинг продуктов, доступных на сайте.

1 Ответ

0 голосов
/ 01 ноября 2019

flipkart: он загружается динамически из тега скрипта, когда браузер выполняет javascript на веб-странице. Вы можете отредактировать эту информацию и проанализировать ее с помощью json parser, чтобы получить необходимую информацию, используя requests;без накладных расходов селена.

import requests, re, json

p = re.compile(r'window\.__INITIAL_STATE__ = (.*);')
r = requests.get('https://www.flipkart.com/lenovo-core-i3-6th-gen-4-gb-1-tb-hdd-windows-10-home-ip-320e-laptop/p/itmf3s32ghxrkrhf?pid=COMEWM7FTAQ9EHRF&srno=b_1_2&otracker=browse&lid=LSTCOMEWM7FTAQ9EHRFBL70ZV&fm=organic&iid=90098c10-e53b-49dc-9359-ff04338c0c4e.COMEWM7FTAQ9EHRF.SEARCH&ssid=2d6xzladk00000001572540087124')
data = json.loads(p.findall(r.text)[0])['pageDataV4']['page']['data']['10002'][1]['widget']['data']

##data sections:
# data.keys()

##pricing info:
# data['pricing']['value'].keys()
# data['pricing']['value']['mrp'].keys()

##rating info:
# data['ratingsAndReviews']['value']['rating']

price = data['pricing']['value']['mrp']['currency'] + str(data['pricing']['value']['mrp']['value'])
title = ' '.join(reversed([v for k,v in data['titleComponent']['value'].items() if k in ['title', 'subtitle']]))
average_rating = data['ratingsAndReviews']['value']['rating']['average']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...