我最近发现了一种使用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;
现在我假设<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)
请帮助循环?
答案 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}}