【问题标题】:Parse FacebookPage Using BeautifullSoup使用 BeautifulSoup 解析 Facebook 页面
【发布时间】:2014-12-12 02:05:19
【问题描述】:

我正在 facebook 的 html 页面中搜索名称。 如果我像这样获取文件 html.txt:

html = open('html.txt','r').read()
soup = BeautifulSoup(html)

如果我用 find 搜索名字似乎没问题,但如果我尝试用 BS 搜索我什么都找不到..

>>>html.find("Joseph Tan")
98939
>>>html[98700:99000]
'<div class="fwn fcg"><span class="fcg"><span class="fwb"><a class="profileLink" href="https://www.facebook.com/ASD.391" data-ft="&#123;&quot;tn&quot;:&quot;l&quot;&#125;" data-hovercard="/ajax/hovercard/user.php?id=123456">Alex Tan</a></span> condivided the photo <a class="profileLink" '
>>> soup.findAll('div',{'class':'fwn fcg'})
[]
>>> soup.findAll('span',{'class':'fwb'})
[]
>>> soup.findAll('a',{'class':'profileLink'})
[]
>>> 

有人可以帮助我吗?非常感谢

编辑:重新创建的 HTML 页面

html page

【问题讨论】:

  • 你能分享示例 HTML 代码吗?
  • 我重新创建了 html 页面并更正了名称。我在等你的帮助

标签: parsing python-2.7 beautifulsoup


【解决方案1】:

它的工作原理如下:

print soup.find_all('div', class_=['fwn','fcg'])

OUTPUT:

[<div class="uiHeaderActions rfloat _ohf fsm fwn fcg"><a class="_1c1m" href="#" role="button">Segna tutti come già letti</a> · <a accesskey="m" ajaxify="/ajax/messaging/composer.php" href="/messages/new/" id="u_0_8" rel="dialog" role="button">Invia un nuovo messaggio</a></div>, <div class="uiHeaderActions fsm fwn fcg"><a href="#" id="u_0_9" role="button">Segna come già letto</a> · <a href="/settings?tab=notifications&amp;section=on_facebook" target="_blank">Impostazioni</a></div>, <div class="fsm fwn fcg"><a ajaxify="/settings/language/language/?uri=https%3A%2F%2Fwww.facebook.com%2Fshares%2Fview%3Fid%3D10152555113196961&amp;source=TOP_LOCALES_DIALOG" href="#" rel="dialog" role="button" title="Usa Facebook in un'altra lingua.">Italiano</a></div>]

根据==>this链接,这是如何使用BS搜索类和其他HTML元素的样式。请检查。

有两个问题。

1.你写的方式和我上面提供的链接不匹配。可能是您没有使用更新版本的 BS。

2. 有两个类“fwn”和“fcg”。所以你必须在一个列表中给出他们的名字,这就是我得到输出的方式。

同样适用于'span'和'a'如下:

print soup.find_all('span', class_='jewelCount')
print soup.find_all('a', class_='_awj')

找不到您给定的'span''fwb' 类和'a''profileLink' 类。因为它们不在HTML 中。

您可以通过打印所有 span 和 a 来检查。 写信print soup.find_all('a')print soup.find_all('span')*自行检查。

希望这会有所帮助,如果没有,请再写一次! :)

【讨论】:

  • 不客气,加布里奥 :) 能得到这样的补充来帮助他人真的很高兴... :D 顺便说一句,你的项目的目的是什么?如果没有问题,分享给我:“sadi.research@gmail.com” 我也在学习python,也许我们可以互相支持:)
  • 我给你发了一封邮件,我是新手,嗯>.
  • 很抱歉,我仍然找不到包含名称“Joseph Tan”的“文本”。您可以看到两个 div(第一个包含“Tan”名称,第二个由程序找到)是不同的..我仍然无法使用 bs 找到正确的文本...
  • 因为“Joseph Tan”不是任何 HTML 元素的一部分。您在 html 文件中搜索“Joseph Tan”,您会在已注释掉的 中找到此名称。在另一个地方你会发现这是一个 JSON 数据而不是 HTML 元素。这就是为什么你没有找到这个名字。将找不到 HTML 元素之外的任何内容。
  • 好的,我对 'html.find('Name')' 的积极回报感到困惑。我将搜索有关 JSON 数据的信息。这将是正确的方式?
猜你喜欢
  • 1970-01-01
  • 2013-09-30
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
  • 2023-03-11
  • 2020-06-19
相关资源
最近更新 更多