【问题标题】:How to apply loop to extract contents from "DIV" tag while using Beautiful soup?使用美丽汤时如何应用循环从“DIV”标签中提取内容?
【发布时间】: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>

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

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

我的代码是这样的:

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


【解决方案1】:

你的代码对我来说很好,除了语法错误:find_hi-again is not a valid variable name.

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'")

【讨论】:

  • 请在大型真实页面上尝试并告诉我它是否有效,因为它不适合我。是的,我起了这个名字,我知道它会引发错误。
  • 感谢您的回答,我检查了它是否有效,我想它在我在 expedia 和 makemytrip 上尝试过的某些网站上无效,它无效但在其他网站上有效
猜你喜欢
  • 1970-01-01
  • 2020-03-17
  • 2016-03-22
  • 1970-01-01
  • 2020-07-27
  • 2019-11-07
  • 2015-12-25
  • 2021-02-08
  • 1970-01-01
相关资源
最近更新 更多