2017-12-17 10 views
-1

ここで提供されているリンクの製品に関する基本情報(製品名、画像、評価、価格)を取得するために2日間苦労しているので、 。あなたは、内側li要素を必要としながら、ul要素 - - 各製品容器を表す私は新しいです、この私のコードとはAttributeError: 'NavigableString'オブジェクトに属性がありません。インデックスが範囲外です

import urllib.request 
from bs4 import BeautifulSoup 
from random import randint 
from bs4.dammit import EncodingDetector 
import re 
import sys 


url='https://fr.aliexpress.com/category/205000316/men-clothing-accessories.html' 
headers = {} 
headers['User-Agent'] = "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:48.0) Gecko/20100101 Firefox/48.0,Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0',Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0',Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EN; rv:11.0) like Gecko',Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)',Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A'" 

req = urllib.request.Request(url, headers = headers) 
html = urllib.request.urlopen(req).read() 

soup = BeautifulSoup(html.decode('utf8', 'ignore'), "html.parser") 


# retrive infos such product name, price , rating 
Prod=soup.find_all('ul', class_='util-clearfix son-list') 

for item in Prod: 
    print(item.contents[0].find_all("span",{"class:","star star-s "[0].text) 
    print(item.contents[0].find_all("span",{"class:","star star-s "[0].text) 
    print(item.contents[0].find_all("span",{"class:","star star-s "[0].text) 
+0

なぜですか同じ要素の3倍?おそらく最初の 'for'の中で2番目の' for'ループを使用します。 – furas

+0

あなたは同じインデックスを何度も印刷しているようですが、おそらくコンテンツのような動的インデックスを使用するべきでしょう。 – vladko

答えて

1

あなたの最初のエラーがProdが実際に製品のリストと一致していることであるパイソンします。

これを変更して製品を見つけると、製品のコンテナを繰り返し、名前、評価、その他の情報を含む内部要素を探します。

products = soup.select('ul.son-list li.list-item') 
for product in products: 
    name = product.select_one("a.product").get_text() 
    stars_element = product.select_one(".star") 
    rating = stars_element["title"].split(": ")[1].strip().split(" ", 1)[0] if stars_element else "Unknown rating" 

    print(name, rating) 

プリント:

Lurker Requin Peau Soft Shell V4 Tactique Militaire Veste Hommes Imperméable Coupe-Vent Chaud Manteau À Capuchon de Camouflage C... 4.8 
HEYGUYS coton t chemises hommes new summer street wear hanche hop T-SHIRTS 2017 marque de mode fermeture éclair sur la manche t-... 4.8 
2017 Nutella Motif Hommes et Femmes Hoodies Couples Casual Style 3D Impression Personnalité Automne Hiver Sweats À Capuche Survê... 4.8 
... 
+0

こんにちは、これは完全に動作しますが、このラインの説明= stars_element ["title"]。split( ":" stars_element else Unknown rating – Ilyas

+0

@Ilyasそれは、 "title"属性の数値評価値を取得する単なる1つの方法です。 – alecxe

+0

ありがとうたくさんのalecxeしかし、私はsqliteにこのリストを挿入したい場合は、どのように私は、あなたのアイデアを持っていることができますが、私は試してみましたが、任意の成功 – Ilyas

0

商品名、画像、価格:

import urllib.request 
from bs4 import BeautifulSoup 

url='https://fr.aliexpress.com/category/205000316/men-clothing-accessories.html' 

headers = {} 
headers['User-Agent'] = "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:48.0) Gecko/20100101 Firefox/48.0,Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0',Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0',Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EN; rv:11.0) like Gecko',Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)',Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A'" 

req = urllib.request.Request(url, headers = headers) 
html = urllib.request.urlopen(req).read() 

soup = BeautifulSoup(html.decode('utf8', 'ignore'), "html.parser") 

products = soup.find_all('div', class_='item') 

for item in products: 
    print(' item:', item.find(class_='info').find("a").text) 
    print('price:', item.find(class_="price").find(class_='value').text) 
    print('image:', item.find(class_="pic").find("img")['src']) 
    print('--') 
そのためには、HTML要素を使用して、抽出するために必要なデータを表現するかを理解するために、ブラウザの開発ツールが必要になります

結果:

item: Rocksir punisher t chemises pour hommes t-shirt Coton de mode marque t shirt hommes Casual Manches Courtes le punisher T-shirt h... 
price: € 12,05 - 12,92 
image: //ae01.alicdn.com/kf/HTB1ByVZSpXXXXcxaXXXq6xXFXXXW/New-Design-Male-Novelty-Men-T-shirt-Fashion-Cotton-O-neck-Hip-Hop-T-shirt-.jpg_220x220.jpg 
-- 
item: DIFFELEMENT 2017 Nouveau style long Manteau Hommes marque vêtements mode Long Vestes Manteaux marque-vêtements hommes Pardessus ... 
price: € 44,82 
image: //ae01.alicdn.com/kf/HTB12IqMXEAKL1JjSZFkq6y8cFXa2/DIFFELEMENT-2017-New-style-long-Coat-Men-brand-clothing-fashion-Long-Jackets-Coats-brand-clothing-mens.jpg_220x220.jpg 
-- 
関連する問題