Как очистить story_id от базовой версии facebook?

#facebook #web-scraping #beautifulsoup #python-requests

#Facebook #очистка веб-страниц #beautifulsoup #python-запросы

Вопрос:

Базовый файл facebook lxml выглядит следующим образом:

 <div class="feed" id="structured_composer_async_container"><section class="_7k7 storyStream _5nxi"> 
<article class="_55wo _56bf _5rgl" data-ft=" {amp;quot;**mf_story_id:4364550910283823**amp;quot;,amp;quot;top_level_post_idamp;quot;:amp;quot;4364550910283823amp;quot;,amp;quot;tl_objidamp;quot;:amp;quot;4364550910283823amp;quot;,amp;quot;content_owner_id_newamp;quot;:amp;quot;100001868724006amp;quot;,amp;quot;original_content_idamp;quot;:amp;quot;716340598960028amp;quot;,amp;quot;original_content_owner_i0</span></a></div></div>...
  

И я хочу очистить «mf_story_id» каждого сообщения со страницы Facebook,
Я использовал этот конкретный код, используя Beautiful-Soup и Request:

 post_id=[]
    for element in soup.find_all("section"):
        for article in element.find_all("article"):
            for xyz in article.find_all("data-ft"):
                post_id.append(xyz["mf_story_id"])
            
post_id = ' '.join(post_id)     
return post_id
  

Но это дает мне нулевое значение, как мне изменить код, чтобы очистить необходимые данные?
Заранее благодарю вас!

Ответ №1:

Вы можете попробовать этот пример для анализа атрибута Json внутри data-ft= :

 import json
from bs4 import BeautifulSoup


txt = '''
<div class="feed" id="structured_composer_async_container">
<section class="_7k7 storyStream _5nxi"> 
<article class="_55wo _56bf _5rgl" data-ft="{amp;quot;mf_story_idamp;quot;:amp;quot;4364550910283823amp;quot;,amp;quot;top_level_post_idamp;quot;:amp;quot;4364550910283823amp;quot;}">
</section>
</div>
'''

soup = BeautifulSoup(txt, 'html.parser')

for article in soup.select('article[data-ft]'):
    data_ft = json.loads(article['data-ft'])
    print(data_ft['mf_story_id'])
  

С принтами:

 4364550910283823
  

Ответ №2:

 from bs4 import BeautifulSoup
from ast import literal_eval


txt = '''
<div class="feed" id="structured_composer_async_container">
<section class="_7k7 storyStream _5nxi"> 
<article class="_55wo _56bf _5rgl" data-ft="{amp;quot;mf_story_idamp;quot;:amp;quot;4364550910283823amp;quot;,amp;quot;top_level_post_idamp;quot;:amp;quot;4364550910283823amp;quot;}">
</section>
</div>
'''

soup = BeautifulSoup(txt, 'html.parser')

target = literal_eval(soup.select_one("article._55wo._56bf._5rgl")['data-ft'])

print(target)
print(target.keys())
  

Вывод:

 {'mf_story_id': '4364550910283823', 'top_level_post_id': '4364550910283823'}
dict_keys(['mf_story_id', 'top_level_post_id'])