python find_all_next в beautifulsoup не может найти строку - PullRequest
1 голос
/ 11 марта 2019

Я пытаюсь получить имя пользователя на странице Instagram. И я должен использовать часть данных, которые я получаю после "data = soup.find_all ('script') [3]" Это выглядит так:

Blockquote : : "RU", "код_язык": "ан", "языковой стандарт": "en_US", "entry_data": { "PostPage": [{ "graphql": { "shortcode_media": { "__ Ьурепат": "GraphImage", "идентификатор": "1968747493659350883", "шорткод": "BtSZWokAZdj", "размеры": { "высота": 640, "ширина": 640}, "gating_info": NULL, "media_preview": "ACoq5miitSxxIGTHPXPGcd8ZFAGXRXSSWypFsAAZ / lzjpn / Csm5sjAu7Ib8MUAUaKU0lABVq0lMUqsPUA /Q8VVpynBB9CKAOtuOFB9CD+uP5Gq19HuiOPTP5Ul1exhdgy7kdF7fU/wCGatJiRPqv5ZFIZybnP4UynOpUlT1HFNpiClDFeRSUUATLcSJ904+lPF5MvR2H41WooAc7lzuY5J702iigD//Z","display_url":"https://instagram.fhel3-1.fna.fbcdn.net/vp/68311f4b09669fd75609e9fcabbf1ae0/5D0517DE/t51.2885-15/e35/49907137_294327238101721_6745007497573009307_n.jpg ? _nc_ht = instagram.fhel3-1.fna.fbcdn.net" "display_resources": [{ "ЦСИ":" https://instagram.fhel3 -1.fna.fbcdn.net / оп / 68311f4b09669fd75609e9fcabbf1ae0 / 5D0517DE /t51.2885-15/e35/49907137_29432723810 ? 1721_6745007497573009307_n.jpg _nc_ht = instagram.fhel3-1.fna.fbcdn.net" "config_width": 640, "config_height": 640}, { "SRC":" https://instagram.fhel3 -1. fna.fbcdn.net/vp/68311f4b09669fd75609e9fcabbf1ae0/5D0517DE/t51.2885-15/e35/49907137_294327238101721_6745007497573009307_n.jpg?_nc_ht=instagram.fhel3-1.fna.fbcdn.net","config_width":750,"config_height ": 750}, {" SRC ":"? * +1014 * -1.fna.fbcdn.net / VP / 68311f4b09669fd75609e9fcabbf1ae0 / 5D0517DE / t51.2885-15 / E35 / 49907137_294327238101721_6745007497573009307_n.jpg _nc_ht = instagram.fhel3- 1.fna.fbcdn.net"," config_width ": 1080," config_height ": 1080}]," accessibility_caption ":" Изображение может содержать: один или несколько людей и крупным планом "," is_video ": false," should_log_client_event "ложь" tracking_token ":" eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiN2Q1Yjg2NmY5OGIwNDVhNWIxMmRhNjEwZTA3NDY1MmYxOTY4NzQ3NDkzNjU5MzUwODgzIn0sInNpZ25hdHVyZSI6IiJ9" , "edge_media_to_tagged_user": { "ребро": []}, "edge_media_to_caption": { "ребро": [{ "узел": { "текст": "\ u2022 \ nШкары покажут вашу историю. \ nВаш боль. \ nВаш ненависть. \ nВаш грусть и отчаяние. \ nОни делают вас такими, какие вы есть, и единственными в своем роде с каждой другой отметкой. \ nНекоторые остаются, некоторые уходят. \ nНемного ярче, некоторые светлее. \ nНекоторые больше, некоторые меньше. \ nНемного глубже, кто-то на поверхности. \ nНо они действительно все одинаковые, понимаете? \ nЭто все шрамы, просто рассказывающие разные моменты нашей жизни, нашу историю. \ nНаш сувенир на протяжении всей нашей жизни, который показывает нам, сколько мы выросли. \ nСколько мы преодолели. Насколько мы стали сильными. \ NКак храбрыми и смелыми мы стали с самых трудных и мрачных времен нашей жизни. \ u2022 \ n \ u2022 \ n \ u2022 \ n # стихотворение #cuts #selfharm #tatoo #dark #pain #sad #lonely #anxiety #depressed "}}]}," caption_is_edited ": true," has_ranked_comments "ложь" edge_media_to_comment ": {" считать ": 1," page_info ": {" has_next_page "ложь" end_cursor ": NULL}," ребра ": []}," comments_disabled "ложь" taken_at_timestamp» : 1548913011, "edge_media_preview_like": { "счетчик": 17, "ребро": []}, "edge_media_to_sponsor_user": { "ребро": []}, "расположение": NULL, "viewer_has_liked" ложь "viewer_has_saved" ложь, "viewer_has_saved_to_collection" ложь "viewer_in_photo_of_you" ложь "viewer_can_reshare": правда, "владелец": { "ID": "10173498181", "is_verified" ложь "profile_pic_url": "https://instagram.fhel3 -1.fna.fbcdn.net / оп / 9a17134e8d0a36efec53f1da5cac1f38 / 5D14BC0F / t51.2885-19 / s150x150 / 47690762_475199173011446_4764198224049209344_n.jpg _nc_ht = instagram.fhel3-1.fna.fbcdn.net », "имя пользователя": "дьяволы .tea ..", "blocked_by_viewer" ложь "followed_by_viewer" ложь "full_name": "депрессия \ ud83e \ udd40", "has_blocked_viewer" ложь "is_privat е «ложь» is_unpublished «ложь» requested_by_viewer "ложь} ......

Есть часть "username" (в конце blockquote).Я думаю, что это строка, но я не могу ее поймать.Так что это не строка, но что это?Это класс?Какой метод я должен использовать, чтобы получить имя пользователя "username": "devils. .tea. ".Заранее спасибо, если можете помочь.

....
req = requests.get(url)
soup = BeautifulSoup(req.text, "lxml")
data = soup.find_all('script') [3]
username = data.find_all_next(string="username")
print (username)

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Вы можете использовать регулярное выражение

import re
data = '''
(script type="text/javascript">window._sharedData = {"config":{"csrf_token":"hIuZDxW17bTXz5EDLY25ftqivOOrLEeZ","viewer":null,"viewerId":null},"supports_es6":false,"country_code":"RU","language_code":"en","locale":"en_US","entry_data":{"PostPage":[{"graphql":{"shortcode_media":{"__typename":"GraphImage","id":"1968747493659350883","shortcode":"BtSZWokAZdj","dimensions":{"height":640,"width":640},"gating_info":null,"media_preview":"ACoq5miitSxxIGTHPXPGcd8ZFAGXRXSSWypFsAAZ/lzjpn/Csm5sjAu7Ib8MUAUaKU0lABVq0lMUqsPUA/Q8VVpynBB9CKAOtuOFB9CD+uP5Gq19HuiOPTP5Ul1exhdgy7kdF7fU/wCGatJiRPqv5ZFIZybnP4UynOpUlT1HFNpiClDFeRSUUATLcSJ904+lPF5MvR2H41WooAc7lzuY5J702iigD//Z","display_url":"https://instagram.fhel3-1.fna.fbcdn.net/vp/68311f4b09669fd75609e9fcabbf1ae0/5D0517DE/t51.2885-15/e35/49907137_294327238101721_6745007497573009307_n.jpg?_nc_ht=instagram.fhel3-1.fna.fbcdn.net","display_resources":[{"src":"https://instagram.fhel3-1.fna.fbcdn.net/vp/68311f4b09669fd75609e9fcabbf1ae0/5D0517DE/t51.2885-15/e35/49907137_294327238101721_6745007497573009307_n.jpg?_nc_ht=instagram.fhel3-1.fna.fbcdn.net","config_width":640,"config_height":640},{"src":"https://instagram.fhel3-1.fna.fbcdn.net/vp/68311f4b09669fd75609e9fcabbf1ae0/5D0517DE/t51.2885-15/e35/49907137_294327238101721_6745007497573009307_n.jpg?_nc_ht=instagram.fhel3-1.fna.fbcdn.net","config_width":750,"config_height":750},{"src":"https://instagram.fhel3-1.fna.fbcdn.net/vp/68311f4b09669fd75609e9fcabbf1ae0/5D0517DE/t51.2885-15/e35/49907137_294327238101721_6745007497573009307_n.jpg?_nc_ht=instagram.fhel3-1.fna.fbcdn.net","config_width":1080,"config_height":1080}],"accessibility_caption":"Image may contain: one or more people and closeup","is_video":false,"should_log_client_event":false,"tracking_token":"eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiN2Q1Yjg2NmY5OGIwNDVhNWIxMmRhNjEwZTA3NDY1MmYxOTY4NzQ3NDkzNjU5MzUwODgzIn0sInNpZ25hdHVyZSI6IiJ9","edge_media_to_tagged_user":{"edges":[]},"edge_media_to_caption":{"edges":[{"node":{"text":"\u2022\nScars show your story. \nYour pain. \nYour hate.\nYour sadness and despair. \nThey make you who you are, and one of a kind with every different mark. \nSome stay, some go.\nSome brighter, some lighter.\nSome bigger, some smaller.\nSome deeper, some one the surface. \nBut they are really all the same, you see?\nThey are all scars, just telling different points of our life, our story. \nOur souvenir throughout our whole life, that shows us how much we've grown. \nHow much we have overcome. How strong we've become.\nHow brave and courageous we've become from the hardest and darkest times of our life. \u2022\n\u2022\n\u2022\n\u2022\n#poem #cuts #selfharm #tatoo #dark #pain #sad #lonely #anxiety #depressed"}}]},"caption_is_edited":true,"has_ranked_comments":false,"edge_media_to_comment":{"count":1,"page_info":{"has_next_page":false,"end_cursor":null},"edges":[]},"comments_disabled":false,"taken_at_timestamp":1548913011,"edge_media_preview_like":{"count":17,"edges":[]},"edge_media_to_sponsor_user":{"edges":[]},"location":null,"viewer_has_liked":false,"viewer_has_saved":false,"viewer_has_saved_to_collection":false,"viewer_in_photo_of_you":false,"viewer_can_reshare":true,"owner":{"id":"10173498181","is_verified":false,"profile_pic_url":"https://instagram.fhel3-1.fna.fbcdn.net/vp/9a17134e8d0a36efec53f1da5cac1f38/5D14BC0F/t51.2885-19/s150x150/47690762_475199173011446_4764198224049209344_n.jpg?_nc_ht=instagram.fhel3-1.fna.fbcdn.net","username":"devils..tea.","blocked_by_viewer":false,"followed_by_viewer":false,"full_name":"depressed\ud83e\udd40","has_blocked_viewer":false,"is_private":false,"is_unpublished":false,"requested_by_viewer":false}......
'''

r = re.compile(r'username":"(.*)(?=","blocked)')
print(r.findall(data))
1 голос
/ 11 марта 2019

Или, для тех из нас, кто не любит регулярное выражение (подтолкнуть, подтолкнуть @QHarr: D), вы можете попробовать это:

data = [your quote above]
data_list = data.split(",")
for i in data_list:
   if 'username' in i:
       print(i)

Вывод:

"username":"devils..tea."
...