Я пытаюсь очистить комментарии под новостными статьями, чтобы поиграть с созданием языковой модели из этих комментариев.
Я успешно очистил раздел комментариев, но у меня возникают проблемы, когда есть скрытые комментарии под кнопкой «показать больше комментариев». Здесь - это справочный сайт, он находится на исландском языке c и есть два типа дополнительных кнопок.
Во-первых, кнопка, которая загружает еще X комментариев, на исландском c : Hlaða X ummæli að auki .
Во-вторых, кнопка, которая загружает еще X комментариев к данной цепочке комментариев, на исландском языке c: Sýna 10 svör að auki í þessum þræði .
Вот мой код atm. Любые советы по этому поводу приветствуются!
import requests
from jsonfinder import jsonfinder
import json
import lxml.html
import re
from bs4 import BeautifulSoup
url = 'https://www.visir.is/g/20201996612d?fbclid=IwAR2wg5dBj0ZyjmQbJBDwyOx1PNS1spS2bYAXEQmomcOa93Hsfe_8SE_Hrxo'
pattern = re.compile("ReactRenderer")
FB_COMMENT_PLUGIN_URL = "https://www.facebook.com/plugins/feedback.php"
r = requests.get(url)
root = lxml.html.fromstring(r.text)
# pick up the api_key:
api_key = root.xpath('/html/head/meta[@property="fb:app_id"][1]/@content')[0]
og_url = root.xpath('/html/head/meta[@property="og:url"][1]/@content')[0]
print("Api-key:", api_key)
print("Og-url:", og_url)
print()
payload = {"api_key": api_key, "href": og_url}
r = requests.get(FB_COMMENT_PLUGIN_URL, params=payload)
print(r.url)
print()
for _start, _end, obj in jsonfinder(r.text):
if obj is None:
continue
else:
if "require" in obj:
for x in obj["require"]:
matched = pattern.search(str(x))
if matched:
comments_json = x[3][0]['props']['comments']['idMap']
resutls = {'url': url, 'title': '', 'comments':{}}
keys_for_title:list = ['id', 'name', 'uri', 'type']
keys_for_comments:list = ['id', 'authorID', 'body', 'ranges', 'timestamp', 'targetID', 'ogURL', 'likeCount', 'hasLiked', 'canLike', 'canEdit', 'hidden', 'highlightedWords', 'reportURI', 'spamCount', 'canEmbed', 'type']
increment=1
for key, value in comments_json.items():
#We try match a pattern of keys to a given pattern to find each section
if all(item in value.keys() for item in keys_for_title) and len(value.keys())==len(keys_for_title):
resutls["title"] = value['name']
if all(item in value.keys() for item in keys_for_comments) and len(value.keys())==len(keys_for_comments):
comments:dict = {}
comments['text'] = value['body']['text']
comments['likes'] = value['likeCount']
authorID = value['authorID']
for k, v in comments_json.items():
if v['id'] == authorID:
comments['name'] = v['name']
resutls['comments'][increment] = comments
increment += 1
if comments_json:
print(json.dumps(resutls, indent=4, ensure_ascii=False))