如何使用find_all()提取所需的元素

时间:2017-11-16 10:16:01

标签: python selenium beautifulsoup findall

我试图提取作者'亚马逊页面中的名字。问题是,有太多标签具有相同的类,并且没有其他属性来标识确切的元素。现在我想提取作者姓名。它出现在第二个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&amp;sr=8-2">Arthur Conan Doyle</a></span></div>
&#13;
&#13;
&#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)

1 个答案:

答案 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"