我试图提取作者'亚马逊页面中的名字。问题是,有太多标签具有相同的类,并且没有其他属性来标识确切的元素。现在我想提取作者姓名。它出现在第二个span标记中。
<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&sr=8-2">Arthur Conan Doyle</a></span></div>
&#13;
尽可能地,两个span标签都有相同的类。我想要第二个span标签。而且更多的是,a标签不存在于所有块中。所以我必须只使用span标签来提取作者姓名。我怎么能得到作者的名字?
我正在使用BeautifulSoup和selenium。我的代码是:
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)
答案 0 :(得分:-1)
找到上面的&#34; div&#34;那个元素&#34; span&#34;。然后提取div标签的整个文本。正如你所说,将会有一个&#34; by&#34;每个代码块中的子字符串。用它来分割文本并将其复制到d [&#34;作者&#34;]部分。如果&#34; by&#34;不存在,请在使用if条件将其复制到字典之前进行检查。如果你直接复制,那么你可能会得到Array out of Bound异常。所以请使用if。
以下是代码:
temp = authors[value].text
temp1 = temp.split("by")
#print(temp[1])
if temp1[0]!=temp:
d["Author"] = temp1[1]
else:
d["Author"] = "None"