2017-11-16 15 views
0

amazonページで著者の名前を抽出しようとしています。問題は、同じクラスのタグが非常に多く、正確な要素を特定するための他の属性がないことです。今私は著者名を抽出したいと思います。これは2番目のspanタグにあります。find_all()を使用して必要な要素を抽出する方法

<div class="a-row a-spacing-none"> 
 
<span class="a-size-small a-color-secondary">by </span> 
 
<span class="a-size-small a-color-secondary"><a class="a-link-normal a-text-normal" href="/Arthur-Conan-Doyle/e/B000AQ43GQ/ref=sr_ntt_srch_lnk_2?qid=1510823399&amp;sr=8-2">Arthur Conan Doyle</a></span></div>

私たちができるように、両方のspanタグで同じクラスがあります。 2番目のスパンタグが必要です。さらに、すべてのブロックにタグが存在しません。だから私は著者名を抽出するスパンタグだけを使用する必要があります。どのように私は著者名を得ることができますか?私はBeautifulSoupとselenium.Myコードを使用しています

は次のとおりです。

 soup=BeautifulSoup(self.driver.page_source,"html.parser") 
    titles=soup.find_all("h2",{"class":"a-size-medium s-inline s-access-title a-text-normal"}) 
    authors=soup.find_all("span",{"class":"a-size-small a-color-secondary"}) 
    for value in range(len(titles)): 
     d={} 
     d["Title"]=titles[value].text 
     d["Author"]=authors[value+2].text 
     title.append(d) 

答えて

-1

は、 "スパン" のために上記の "DIV" 要素を検索します。 divタグのテキスト全体を抽出します。コードのすべてのブロックに "by"部分文字列があります。それを使ってテキストを分割し、d ["著者"]部分にコピーします。 "by"がない場合は、条件を使用して辞書にコピーする前に確認してください。 uを直接コピーすると、UはBound例外からArrayを取得することがあります。 ifを使用します。ここで

はコードです:

temp = authors[value].text 
temp1 = temp.split("by") 
#print(temp[1]) 
if temp1[0]!=temp: 
    d["Author"] = temp1[1] 
else: 
    d["Author"] = "None" 
関連する問題