编写数据刮板的问题

时间:2018-12-23 11:19:30

标签: python web-scraping beautifulsoup

我必须编写代码才能从网站上抓取数据,然后对它们进行大学分析。 我的问题是我为了获得所有产品的一些数据而编写了这段代码,但是当我运行它时,它只显示每个变量的单个响应。 您能帮我解决此错误吗?

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 :(得分:1)

您可以使用其他选择器。每个产品的两个价格按指数分开。使用joinfindall提取价格特定的信息。

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