Проблемы записи данных скребком - PullRequest
0 голосов
/ 23 декабря 2018

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

from bs4 import BeautifulSoup as soup
import urllib
from urllib.request import urlopen as uReq
import requests


myurl='https://boutique.orange.fr/mobile/choisir-un-mobile'


Uclient=uReq(myurl)
page=Uclient.read()
Uclient.close()

pagesoup=soup(page,'html.parser')

containers=pagesoup.findAll('div',{'class':'box-prod pointer'})


container=containers[0]

produit=container.img['alt']

price=container.findAll('span',{'class':'price'})


price2=container.findAll('div',{'class':'prix-seul'})


avis=container.footer.div.a.img['alt']


file="orange.csv"
f=open(file,'w')
headers='produit,prix avec abonnement, prix seul, avis\n'
f.write(headers)


for container in containers:
    produit=container.img['alt']

    price=container.findAll('span',{'class':'price'})


    price2=container.findAll('div',{'class':'prix-seul'})


    avis=container.footer.div.a.img['alt']

1 Ответ

0 голосов
/ 23 декабря 2018

Вы можете использовать разные селекторы.Разделите две цены на продукт по индексу.Извлечь информацию о цене, используя join и findall.

from bs4 import BeautifulSoup
import requests
import pandas as pd

url = 'https://boutique.orange.fr/mobile/choisir-un-mobile'
res = requests.get(url)
soup = BeautifulSoup(res.content, "lxml")
#print(len(soup.select('#resultat .box-prod.pointer')))
p = re.compile('[0-9,€]+')
altText= [item.get('alt').strip() for item in soup.select('#resultat .box-prod.pointer .lazy')]
titles = [item.text.strip().replace('\n', ' ') for item in soup.select('#resultat .box-prod.pointer .titre-produit')]
allPrices = [''.join(p.findall(item.text)) for item in soup.select('#resultat  span.price')]
aPartirPrice = allPrices[0::2]
prixSeul = allPrices[1::2]
items = list(zip(titles, altText, aPartirPrice, prixSeul))
df = pd.DataFrame(items,columns=['title', 'altText', 'aPartirPrice', 'prixSeul'])
df.to_csv(r'C:\Users\User\Desktop\Data.csv', sep=',', encoding='utf-8',index = False )

Транспонировать с помощью:

df = df.T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...