Классификация текста из html с помощью BeautifulSoup

#python #html #beautifulsoup #href #text-classification

#питон #HTML #прекрасный суп #href #классификация текстов

Вопрос:

Я получил исходный код html-страницы, а затем проанализировал его с помощью «html5lib» с помощью BeautifulSoup.

У меня есть что-то вроде этого:

 lt;div class="V0h1Ob-haAclf OPZbO-KE6vqe o0s21d-HiaYvf" jsaction="mouseover:pane.wfvdle40;mouseout:pane.wfvdle40" jsan="7.V0h1Ob-haAclf,7.OPZbO-KE6vqe,7.o0s21d-HiaYvf,0.jsaction" jstcache="824"gt;  lt;a aria-label="Muzeum Londynu" class="a4gq8e-aVTXAb-haAclf-jRmmHf-hSRGPd" href="https://www.google.com/maps/place/Muzeum Londynu/data=!4m5!3m4!1s0x48761b5508c1cbeb:0x407de2c1952a25e4!8m2!3d51.5176183!4d-0.0967782?authuser=0amp;amp;hl=plamp;amp;rclk=1" jsaction="pane.wfvdle40;focus:pane.wfvdle40;blur:pane.wfvdle40;auxclick:pane.wfvdle40;contextmenu:pane.wfvdle40;keydown:pane.wfvdle40;clickmod:pane.wfvdle40" jsan="7.a4gq8e-aVTXAb-haAclf-jRmmHf-hSRGPd,0.aria-label,8.href,0.jsaction" jstcache="825"gt;lt;/agt;  lt;div class="CJY91c-jRmmHf-aVTXAb-haAclf-WFkMr" jstcache="826"gt;lt;/divgt;  lt;div aria-label="Muzeum Londynu" class="MVVflb-haAclf V0h1Ob-haAclf-d6wfac MVVflb-haAclf-uxVfW-hSRGPd" jsan="7.MVVflb-haAclf,7.V0h1Ob-haAclf-d6wfac,7.MVVflb-haAclf-uxVfW-hSRGPd,0.aria-label" jstcache="827"gt;  lt;div class="CJY91c-jRmmHf-aVTXAb-haAclf-bIWrp" jstcache="828"gt;lt;/divgt;  lt;div class="lI9IFe"gt;  lt;div class="CJY91c-jRmmHf-aVTXAb-haAclf-HSrbLb" jstcache="829"gt;  lt;div class="RnEfrd-jRmmHf-HSrbLb B9Hcub-QFlW2" jsan="t-pdDsP4P8DQQ,7.RnEfrd-jRmmHf-HSrbLb,7.B9Hcub-QFlW2" jstcache="933"gt;  lt;button jstcache="842" style="display:none"gt;lt;/buttongt;  lt;div class="Z8fK3b" jsan="7.Z8fK3b,t-MjeqqY5XOdM" jstcache="843"gt;   lt;div class="CUwbzc-content gm2-body-2"gt; lt;div class="qBF1Pd-haAclf"gt;  lt;div class="qBF1Pd gm2-subtitle-alt-1" jsan="7.qBF1Pd,7.gm2-subtitle-alt-1,t-u3p6PfXaXm4" jstcache="845"gt;  lt;span jstcache="858"gt;Muzeum Londynult;/spangt;   lt;/divgt;  lt;h1 jstcache="846" style="display:none"gt;lt;/h1gt;   lt;span class="RnEfrd-jRmmHf-HSrbLb-title-Btuy5e-haAclf"gt;lt;/spangt;   lt;/divgt;   lt;div class="section-subtitle-extension" jstcache="847"gt;lt;/divgt;   lt;div class="ZY2y6b-RWgCYc" jsan="7.ZY2y6b-RWgCYc,t-hEqDOx2FFV0" jstcache="848"gt;   lt;div class="OEvfgc-wcwwM-haAclf"gt;   lt;span class="RnEfrd-jRmmHf-HSrbLb-wPzPJb-Btuy5e-haAclf" jstcache="860"gt;lt;/spangt;  lt;span class="gm2-body-2" jsan="t-CJ3Gw1VPbAA,7.gm2-body-2" jstcache="861"gt;  lt;span jstcache="868" style="display:none"gt;lt;/spangt;  lt;span aria-label=" 4,6-gwiazdkowy Opinie (13 898) " class="ZkP5Je" jsan="7.ZkP5Je,0.aria-label,0.role,t-kqtGnPs-9G0" jstcache="869" role="group"gt;  lt;span aria-hidden="true" class="MW4etd" jsan="7.MW4etd,0.aria-hidden" jstcache="872"gt;4,6lt;/spangt;  lt;div jstcache="873" style="display:none"gt;lt;/divgt;  lt;div class="QBUL8c" jsan="7.QBUL8c" jsinstance="0" jstcache="874"gt;lt;/divgt;  lt;div class="QBUL8c" jsan="7.QBUL8c" jsinstance="1" jstcache="874"gt;lt;/divgt;  lt;div class="QBUL8c" jsan="7.QBUL8c" jsinstance="2" jstcache="874"gt;lt;/divgt;  lt;div class="QBUL8c" jsan="7.QBUL8c" jsinstance="3" jstcache="874"gt;lt;/divgt;  lt;div class="QBUL8c cXOKEb-S62Q7b" jsan="7.QBUL8c,7.cXOKEb-S62Q7b" jsinstance="*4" jstcache="874"gt;lt;/divgt;   lt;span aria-hidden="true" class="UY7F9" jsan="7.UY7F9,0.aria-hidden" jstcache="875"gt;(13 898)lt;/spangt;  lt;/spangt;  lt;/spangt;   lt;span jstcache="862" style="display:none"gt;  lt;jsl jstcache="863" style="display:none"gt;lt;/jslgt;   lt;/spangt;   lt;/divgt;   lt;/divgt;   lt;div class="ZY2y6b-RWgCYc"gt;   lt;span jstcache="849" style="display:none"gt;lt;/spangt;   lt;div class="ZY2y6b-RWgCYc" jsinstance="0" jstcache="850"gt;   lt;span jsinstance="0" jstcache="851"gt;  lt;jsl jstcache="852"gt; lt;span jstcache="884" style="display:none"gt;·lt;/spangt;   lt;span jstcache="885"gt;Muzeumlt;/spangt; lt;span jstcache="886" style="display:none"gt;lt;/spangt; lt;/jslgt; lt;/spangt;lt;span jsinstance="*1" jstcache="851"gt; lt;jsl jstcache="852"gt; lt;span aria-hidden="true" class="bXlT7b-hgDUwe" jsan="7.bXlT7b-hgDUwe,0.aria-hidden" jstcache="884"gt;·lt;/spangt; lt;span jstcache="885"gt;150 London Walllt;/spangt; lt;span jstcache="886" style="display:none"gt;lt;/spangt; lt;/jslgt; lt;/spangt; lt;/divgt;lt;div class="ZY2y6b-RWgCYc" jsinstance="1" jstcache="850"gt; lt;span jsinstance="*0" jstcache="851"gt; lt;jsl jstcache="852"gt; lt;span jstcache="884" style="display:none"gt;·lt;/spangt; lt;span jstcache="885"gt;Historia Londynu od starożytności do dziślt;/spangt; lt;span jstcache="886" style="display:none"gt;lt;/spangt; lt;/jslgt; lt;/spangt; lt;/divgt;lt;div class="ZY2y6b-RWgCYc" jsinstance="*2" jstcache="850"gt; lt;span jsinstance="*0" jstcache="851"gt; lt;jsl jstcache="852"gt; lt;span jstcache="884" style="display:none"gt;·lt;/spangt; lt;span jstcache="885"gt;Zamknięcie: 17:00lt;/spangt; lt;span jstcache="886" style="display:none"gt;lt;/spangt; lt;/jslgt; lt;/spangt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/divgt;lt;/divgt;lt;/divgt;lt;div class="CJY91c-jRmmHf-aVTXAb-haAclf-JIbuQc" jstcache="830"gt;lt;/divgt;lt;div class="CJY91c-jRmmHf-aVTXAb-haAclf-HiaYvf" jstcache="831"gt;lt;div class="xwpmRb qisNDe" jsan="t-PLs0ILPSy_c,7.xwpmRb,7.qisNDe,5.width,5.height,5.margin-top,5.margin-bottom,5.margin-left,5.margin-right" jstcache="932" style="width: 84px; height: 84px; margin: 0px;"gt;lt;div class="Vig8jf-haAclf p0Hhde" jsan="7.p0Hhde,7.Vig8jf-haAclf,5.min-width,5.min-height" jstcache="836" style="min-width:84px;min-height:84px"gt;lt;img aria-hidden="true" decoding="async" src="//lh5.googleusercontent.com/proxy/tWfK1sqsGJZNlZu3WTUika5NJAu4mqKhx07Kub2ZjC_yU3PdIv3DWCKe8_cwJ3RBAUHjW5qZp3S6vGLQJ7HnYxCL_4YR4X1T3ju-ISh86JeC5Kb0KGnvp8j8Jt0vvk6Es_gdVz1AyfBfMDSN6DImwkgbwPL0RQ=w138-h92-k-no" style="position: absolute; top: 50%;left: 50%;width: 126px;height: 84px;-webkit-transform: translateY(-50%) translateX(-50%);transform: translateY(-50%) translateX(-50%);"/gt;lt;/divgt;lt;button jstcache="837" style="display:none"gt;lt;/buttongt;lt;div class="badge-container"gt;lt;/divgt;lt;/divgt;lt;/divgt;lt;div class="CJY91c-jRmmHf-aVTXAb-haAclf-hxbzzc" jstcache="832"gt;lt;/divgt;lt;/divgt;lt;div class="CJY91c-jRmmHf-aVTXAb-haAclf-IoWfhc" jstcache="833"gt;lt;/divgt;lt;/divgt;lt;/divgt;  

В последней части был запущен methong .find_all(‘a’, href=True), который дал мне что-то вроде этого:

 [lt;a aria-label="Muzeum Londynu" class="a4gq8e-aVTXAb-haAclf-jRmmHf-hSRGPd" href="https://www.google.com/maps/place/Muzeum Londynu/data=!4m5!3m4!1s0x48761b5508c1cbeb:0x407de2c1952a25e4!8m2!3d51.5176183!4d-0.0967782?authuser=0amp;amp;hl=plamp;amp;rclk=1" jsaction="pane.wfvdle40;focus:pane.wfvdle40;blur:pane.wfvdle40;auxclick:pane.wfvdle40;contextmenu:pane.wfvdle40;keydown:pane.wfvdle40;clickmod:pane.wfvdle40" jsan="7.a4gq8e-aVTXAb-haAclf-jRmmHf-hSRGPd,0.aria-label,8.href,0.jsaction" jstcache="825"gt;lt;/agt;]  

Я пытаюсь специально извлечь долготу и широту, которые [51.5176183, -0.0967782] присутствуют в href.

Я пробовал использовать метод .href, аналогичный методу .text, но когда я использую .href, возвращается «Нет». Не могли бы вы рассказать мне, как извлечь эти два велюра из тела href?

Запуск метода .text в html-коде, возвращающем вывод, подобный этому:

 Museum of London 4,6(13 898) · Museum · 150 London Wall · The history of London from antiquity to today · Closing: 17:00   

Комментарии:

1. Пожалуйста, перепишите разделы вашего кода с правильным форматированием

2. Как мне следует переписать код? Я просто записываю это вот так в одну строчку в своем блокноте.

3. используйте .get(‘href’), чтобы установить данные href в массиве , затем aray.find(‘3d’) или 4d , чтобы разделить lat и lon, если вы поделитесь реальным полным кодом BeautifulSoup, я могу помочь вам больше.

Ответ №1:

Согласно вашему вопросу, я использую метод split() для получения желаемого результата.

скрипт

 html=''' lt;htmlgt;  lt;headgt;  lt;/headgt;  lt;bodygt;  lt;a aria-label="Muzeum Londynu" class="a4gq8e-aVTXAb-haAclf-jRmmHf-hSRGPd" href="https://www.google.com/maps/place/Muzeum Londynu/data=!4m5!3m4!1s0x48761b5508c1cbeb:0x407de2c1952a25e4!8m2!3d51.5176183!4d-0.0967782?authuser=0amp;amp;hl=plamp;amp;rclk=1" jsaction="pane.wfvdle40;focus:pane.wfvdle40;blur:pane.wfvdle40;auxclick:pane.wfvdle40;contextmenu:pane.wfvdle40;keydown:pane.wfvdle40;clickmod:pane.wfvdle40" jsan="7.a4gq8e-aVTXAb-haAclf-jRmmHf-hSRGPd,0.aria-label,8.href,0.jsaction" jstcache="825"gt;  lt;/agt;  lt;/bodygt; lt;/htmlgt; ''' from bs4 import BeautifulSoup soup = BeautifulSoup(html,'html5lib') #print(soup.prettify()) href=soup.find("a",class_="a4gq8e-aVTXAb-haAclf-jRmmHf-hSRGPd").get('href') lat_lan=','.join(href.split('/')[-1].split('?')[0].split(':')[-1].split('!')[2:]).replace('3d','').replace('4d','').split() print(lat_lan)  

Выход

 ['51.5176183', '-0.0967782']