【问题标题】:Scrape original links and headlines from Facebook posts从 Facebook 帖子中删除原始链接和标题
【发布时间】:2019-06-16 00:04:50
【问题描述】:

我需要收集一些 Facebook 分析未提供的信息。例如,在 Facebook 上作为链接帖子推广的文章的原始网址和标题。此信息隐藏在 Facebook 帖子的 html 代码中,但我很难将其挖掘出来。感谢您的帮助。

举个例子:https://www.facebook.com/bbcnews/posts/10156428513547217

我确定了链接的类 (bbc.in...):“_6ks” 和标题:'mbs _6m6 _2cnj _5s6c'

下面的代码没有返回任何东西:

from bs4 import BeautifulSoup
import requests
link = 'https://www.facebook.com/bbcnews/posts/10156428513547217'
r = requests.get(link)
soup = BeautifulSoup(r.content, "lxml")
for paragraph in soup.find_all("div", class_="_6ks"):
    for a in paragraph("a"):
       print(a.get('href'))
for paragraph in soup.find_all("div", class_='mbs _6m6 _2cnj _5s6c'):
    for a in paragraph("a"):
       print(a.get('hover'))

【问题讨论】:

  • 注意:Facebook 的大部分内容本质上是动态的。 BeautifulSoup 是一个静态 HTML 解析器。我建议使用seleniumRequests-HTML 库来完全呈现HTML 内容。
  • 感谢您的回答 - Bitto&robots。两种解决方案都可以完美运行。超级好用!接受第二个只是因为它很整洁。

标签: python-3.x web-scraping beautifulsoup html-parsing


【解决方案1】:

实现相同目的的另一种方法如下:

from bs4 import BeautifulSoup
import requests

link = 'https://www.facebook.com/bbcnews/posts/10156428513547217'

res = requests.get(link,headers={'User-Agent':'Mozilla/5.0'})
comment = res.text.replace("-->", "").replace("<!--", "")
soup = BeautifulSoup(comment, "lxml")
items = soup.select_one('.mbs a')
print(items.get("href")+"\n",items.text)

【讨论】:

  • 嗨@robots.txt!我可以跟进这件事吗?不知何故,这段代码不适用于像这样的帖子 - facebook.com/228735667216/posts/10156284868312217。任何想法为什么?
  • 因为,这次你提供的链接需要登录才能显示内容。
  • 我明白了...谢谢!
【解决方案2】:

您无法获得任何输出的原因是 b'coz 这两个 div 都巧妙地放置在注释标签 &lt;!-- --&gt; 中。解析器会忽略注释。如果您打印汤,两个 div 都存在,但在评论标签内。

我们可以得到 cmets,然后用它做一个新汤来绕过这个。

from bs4 import BeautifulSoup
from bs4 import Comment
import requests
link = 'https://www.facebook.com/bbcnews/posts/10156428513547217'
headers={'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0'}
r = requests.get(link,headers=headers)
soup = BeautifulSoup(r.content, "lxml")
comments=soup.find_all(string=lambda text:isinstance(text,Comment))
soup=BeautifulSoup(comments[0], "lxml")
for paragraph in soup.find_all("div", class_="_6ks"):
    for a in paragraph("a"):
       print(a.get('href'))
print('-------------------------------------------------------------------')
for paragraph in soup.find_all("div", class_='mbs _6m6 _2cnj _5s6c'):
    for a in paragraph("a"):
       print(a.text)

输出

https://l.facebook.com/l.php?u=https%3A%2F%2Fbbc.in%2F2FP4EgR&h=AT3jWrl9cgJEY-8NBLgbvOEtDSZ8dBABo4TJaVJ66QBbWdCsBypvAkN6MD7VhJoOgy_LGJeomQAlcwtex_Ab-7TvWXhKkLB1m_TjzxOSk3R2uP8qTUL3aTTj4Pcz2ZSZunWxZsPtOlJSpay_AtQfNTuLTUQ80OrtvRiDMs8duN3b27IH2UPnGThQ_YGJAcYJdPE3R9JbyxSQNhJ8yTmaRJe8pMNbgVkentXU4p3liys2IQvphwRd0V8ANmo-4xvKj1dRADHy3hOyUkcv_L2u8Z4WpLx1AZQCTitvfSLvhQRMZ0cK1vIjkuv3gfurRf250p3D54GxQZIsVLymDzNtLbOnigIuFRHfQFAUSBDzJGTqQB3hs4lilYyFXIqaC2cdXwDp8GDrmYbgRWmEMmN6A5fHDdRlF4m7MXJO0vJ_7uqkh0TAdcvTSc0dqt5Wv3wOoEN5S1b2ddLZOp3DFwApAGkSHsOtW7Pjc-STFljuV045ERsUWUbmnALSl9vxB6tiZ0poa3aGxZqnlFqsaTB-A8plwCWp5ed9JALlurBco447aELbpuRexqoOajxTvS_yW9BdSXaufzpbPFKaNt5go7uf4GjdekpITCApJo2JoAOzzsfKHdg1MXasOCw
-------------------------------------------------------------------
MPs put forward rival Brexit plans

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多