2017-06-14 7 views
1

を使用して属性の私は、製品の詳細をつかむためのpython3BS4を使用していますが、ここでアマゾン、 で検索私のコードです:これによりグラブは、タグの値がBS4

from bs4 import BeautifulSoup as BS 
import requests 

html = requests.get('http://www.amazon.in/s/ref=nb_sb_noss_2?url=search- 
alias%3Daps&field-keywords=hp+monitors') 

soup = BS(html.text , 'lxml') 
#print(soup.prettify()) 

for i in soup.find_all('li') : 
    print(i.get('id')) 
    h2_tag = i.h2 
    print(h2_tag.get('data-attribute')) 
    print("_____") 

コードのデータ属性の値がh2タグになっていません。一方、の値の値がタグが出てきています。 誰でも私が間違っている場所を教えてもらえますか?ここで言いたいこと

​​

答えて

1

いくつかのこと:

  1. 代わりhtml.textを使用しての、as recommended herehtml.contentを使用しています。

  2. ここでlxmlを使用しますか? html.parserは問題ありません。

  3. data-attributeタグを使用する必要はありません。h2.textを使用して、h2からテキストを取得できます。

    from bs4 import BeautifulSoup 
    import requests 
    
    html = requests.get('http://www.amazon.in/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords=hp+monitors') 
    soup = BeautifulSoup(html.content , 'html.parser') 
    
    for h2 in soup.find_all('h2', class_='s-inline'): 
        print(h2.text) 
    

    出力

    HP 24ES 23.8-HP 24ES 23.8-inch THINNEST LED Monitor (Black)LED Monitor (Black) 
    HP 22es Display 54.6 cm, 21.5 Inch THINNEST IPS LED Backlit Monitor 
    HP 22KD 21.5-inch FULL HD LED Backlit Monitor (Black 
    HP 19KA 18.5-inch LED Backlit Monitor (Black) 
    HP 27es 27 Inches Display IPS LED Backlit Monitor (Full HD) 
    HP 21KD 20.7-inch FULL HD LED Backlit Monitor (Black) 
    LG 24MP88HV-S 24"IPS Slim LCD Monitor 
    Dell S Series S2415H 24-Inch Screen Full HD HDMI LED Monitor 
    Dell E1916HV 18.5-inch LED Monitor (Black) 
    HP 20KD 19.5-inch LED Backlit Monitor (Black) 
    Dell S2216H 21.5-Inch Full HD LED Monitor 
    HP V222 21.5" LED Widescreen Monitor (M1T37AA Black) 
    AlexVyan®-Genuine Accessory with 1 year warranty:= (38.1CM) 15 Inch LCD Monitor for HP, Dell, Lenovo, Pc Desktop Computer Only (Black) 
    Compaq B191 18.5-inch LED Backlit Monitor (Black) 
    HP 20WD 19.45-Inch LED Backlit Monitor 
    HP Compaq F191 G9F92AT 18.5-inch Monitor 
    

    :製品のタイトルを収集する

簡単な方法は、直接s-inlineクラス(製品のタイトル)を持つ<h2>の全てを反復されます

また、インラインコードに太字を使用する代わりに、次のようなバックティックを使用してください。

は `codecode`はcodecodeとしてレンダリングされます


編集:ここでは

soup.find_all('h2')しかしアマゾンのページでは、他のためのH2のタグを持って、ページのすべてのH2タグを得ているでしょう製品よりも私はすべての製品がs-inlineクラスを持っていることに気づいたので、soup.find_all('h2', class_='s-inline")は製品からh2タグだけを取ります。

+0

ありがとうございます。> soup.find_all( 'h2'、class _ = 's-inline')はどうですか? – BoRRis

+0

@BoRRis私はそれを説明するために私の答えを編集しました – TrakJohnson