【发布时间】:2016-12-04 22:33:37
【问题描述】:
我最近发现了一种使用 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>
现在我假设<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
scraping = soup.find_all('div',{'class':'a'})
for i in scraping:
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)
请帮忙循环一下?
【问题讨论】:
-
显示的结果是什么?
-
它显示了一个结果,但它没有显示不同的元素,而是显示来自同一个标签的重复元素,例如 ,*** hi , hi again , well this final , hi , hi again , well这个决赛 ** 而不是 **hi , hi again , well this final , hi1 , hi again1 , well this final1 **
-
尽可能分享 url 和你期望的输出,你当前的代码没有意义。
-
我想打印来自 expedia.com 的内容,例如酒店名称、评级等,当我检查网站时,我发现每个列出的酒店都有一个带有唯一类对象的 div 标签模式。现在我使用 find 而不是 find_all 所以从第一个 div 标签打印所需的东西,我的问题只是如何为每个酒店循环?
-
From memory expedia 严重依赖于 javascript,所以除了可以运行 javascript 的东西之外,你不会使用任何东西来获取源代码
标签: python loops tags beautifulsoup textwrangler