【问题标题】:in Beautifulsoup .find can't find text在 Beautifulsoup .find 中找不到文本
【发布时间】:2015-07-21 08:21:58
【问题描述】:

我必须从论坛下载所有帖子:http://forum.ubuntu.cz/ 我用 Python 2.7 编写代码

我遍历for 循环一个表中的所有帖子(表代表<form name = "quickModForm" >),每个帖子都在<div class = "windowbg">class = "windowbg2" 中。每个帖子都包括<div class = "poster"><div class = "postarea">。从“poster”中提取作者姓名,从“postarea”中提取发布时间和帖子内容。

当我在此页面http://forum.ubuntu.cz/index.php?topic=5279.0 上运行我的代码时,我成功阅读了第一篇文章,但没有阅读第二篇文章。

这是我的代码的一部分:

posts = urllib2.urlopen(link)
posts_soup = BeautifulSoup(posts.read()) 

form = prispevky_soup.find("form", {"name": "quickModForm"})
for divs in form.find_all("div", { "class": [ "windowbg", "windowbg2"]}):

    div = divs.find("div", {"class": "post_wrapper"})
    div_body = div.find("div", {"class": "postarea"})
    div_header = div.find("div", {"class": "poster"})

我发现在 div_header 中总是我需要的所有信息,并且在 div_body 中的某些帖子中是 None,我不知道为什么第一次迭代成功而第二次迭代只是部分,因为 div_header = divs.find("div", {"class": "poster"}) 功能正常,
div_body = divs.find("div", {"class": "postarea"}) 有时不能。帖子的源代码非常相似。

感谢您的帮助,对不起我的英语。

【问题讨论】:

  • 澄清一下:为什么divs[1].find("div", {"class": "postarea"}) 是空的?
  • 是的,divs.find("div", {"class": "postarea"}) 在某些情况下为空,而divs.find("div", {"class": "poster"}) 总是成功,为什么
  • 看起来这是损坏的 HTML。我尝试了几个不同的在线验证器,除此之外,他们都抱怨</div> 没有匹配的<div>
  • 同时,stdlib html.parserlxml 最终都以 post_wrapper div 下方没有 postarea 或以下任何内容结束;在poster 之后的下一个diverror 中向下的一条路。而使用html5lib 解析器也无济于事,因为这不是HTML5……尝试将其解析为XML 会更快地失败; lxml 甚至找不到 windowbg2 这样。
  • 我正在查看 validator.w3.org,您认为这是问题所在,它破坏了我的代码吗?

标签: python html beautifulsoup posts download


【解决方案1】:

使用get_text() 方法获取html标签之间的文本,如下所示:

div = divs.find("div", {"class": "post_wrapper"}).get_text()
div_body = div.find("div", {"class": "postarea"}).get_text()
div_header = div.find("div", {"class": "poster"}).get_text()

【讨论】:

  • 此主题已关闭,网站已损坏。有些标签没有关闭。
猜你喜欢
  • 2020-03-06
  • 2020-09-10
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多