如何应用循环从" DIV"中提取内容标签时使用美丽的汤?

时间:2016-07-30 08:13:27

标签: python loops tags beautifulsoup textwrangler

我最近发现了一种使用bs4非常简洁的网页报废方式,它具有非常好的有组织结构。让我们说这是我们的HTML代码:



<div class="a">
  <div class="b">
    <a href="www.yelloaes.com">'hi'</a>
  </div>
  <div class ="c">
    <p><a href="www.bb.com">'hi again'</a></p>
    <div class="d">
      <p>'well this final'</p>
    </div>
  </div>
</div>


<div class="a">
  <div class="b">
    <a href="www.yelloaes1.com">'hi1'</a>
  </div>
  <div class ="c">
    <p><a href="www.bb1.com">'hi again1'</a></p>
    <div class="d">
      <p>'well this final1'</p>
    </div>
  </div>
</div>
&#13;
&#13;
&#13;

现在我假设<div class="a">是我们的父标签,我们将从这个标签中取出信息,现在这意味着我必须循环通过这个以从所有页面中提取信息。

但是因为我很难理解BeautifulSoup,我使用python代码进行了测试,以便从<div class= "a">的第一次迭代中提取信息

我的代码是这样的:

soup  = BeautifulSoup(r.text)
find_hi =      soup.find('div',{'class':'a'}).div.text
find_hi-again =soup.find('div',{'class':'a'}).find_all('div')[1].p.text
find_final    =soup.find('div',{'class':'a'}).find('div',{'class':'d'}).text

print(find_hi , find_hi-again , find_final)

#output comes as (it worked !!!)
hi , hi again  , this is final 

注意:我真的想坚持这个,所以请不要采取全新的报废方式。现在我似乎无法在所有页面上循环。 我试过这个循环,但没有显示我想看到的结果:

soup  = BeautifulSoup(r.text)
#To have a list of all div tags having this class
scrapping  = soup.find_all('div',{'class':'a'})
for i in scrapping:
    find_hi =      i.div.text
    find_hi-again =i.find_all('div')[1].p.text
    find_final    =i.find('div',{'class':'d'}).text

print(find_hi , find_hi-again , find_final)

请帮助循环?

1 个答案:

答案 0 :(得分:0)

除了语法错误之外,您的代码对我来说很好用:divs = soup.find_all('div',{'class':'a'}) for i in divs: find_hi = i.div.text.strip() find_hi_again = i.find_all('div')[1].p.text.strip() find_final = i.find('div',{'class':'d'}).text.strip() print(find_hi , find_hi_again , find_final) ## (u"'hi'", u"'hi again'", u"'well this final'") ## (u"'hi1'", u"'hi again1'", u"'well this final1'") 不是有效的变量名。

{{1}}