#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'])