簡體   English   中英

使用 BeautifulSoup 在 div 下的 li 中找不到文本

[英]Can't find text in li under div using BeautifulSoup

我正在嘗試使用 BeautifulSoup 在本網站的 div 下獲取 ul 中的文本: https://www.nccn.org/professionals/physician_gls/recently_updated.aspx

但我只得到一個空的div。 我的代碼是:

page = requests.get("https://www.nccn.org/professionals/physician_gls/recently_updated.aspx")

soup=BeautifulSoup(page.content,"html.parser")

_div=soup.find("div",{"id":"divRecentlyUpdatedList"})

element = [i.text for i in b.find("a") for b in _div.find("ul")]

結果是:

HTML文件截圖如下: div和ul

此外,還有 javascript 出現在我試圖從中獲取內容的 div 之后:

div 和 javascript

我也試過像這樣得到所有 li:

l = []
for tag in soup.ul.find_all("a", recursive=True): 
    l.append(tag.text)

但我得到的文字不是我想要的。 javascript 是否隱藏了該 div 下的文本?

歡迎任何幫助。 非常感謝您提前。

內容從端點https://www.nccn.org/professionals/physician_gls/GetRecentlyUpdated.ashx異步填充到 HTML 中,返回 Z0ECD11C1D7A287401F8Z4D。 由於它是通過 JS 異步填充的,因此requests看不到它的結果。

您可以直接請求該端點並改為解析 JSON,例如:

page = requests.get("https://www.nccn.org/professionals/physician_gls/GetRecentlyUpdated.ashx")
list = json.loads(page.content)
for item in list['recent_guidelines']:
    print(item['Name'], item['VersionNumber'], item['PublishedDate'])

問題實際上與您猜想的相反:在 API 調用之后, <div id="divRecentlyUpdatedList">中的內容被 Javascript 填充。

使用requests.get時,任何 Javascript 都不會在網站上執行,因此我們最終會得到一個空的 div。 為此,您需要使用一個使用無頭瀏覽器的庫,以便可以執行 Javascript - 例如requests-html

from requests_html import HTMLSession
from bs4 import BeautifulSoup

URL = "https://www.nccn.org/professionals/physician_gls/recently_updated.aspx"

session = HTMLSession()
site = session.get(URL)
site.html.render()

html = site.html.html

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


_div=soup.find("div",{"id":"divRecentlyUpdatedList"})

現在在_div中,您將獲得來自 API 的渲染內容,您可以繼續查找所需的內容。

怎么去掉里面的文字<li>之后<div></div><div id="text_translate"><p>我想刪除&lt;li&gt;中的"Text" 。</p><p> 這是我的嘗試: </p><p></p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"><div class="snippet-code"><pre class="snippet-code-js lang-js prettyprint-override"> window.onload = function() { var str = document.getElementsByClassName("slide-2")[0].innerHTML; var res = str.replace("Text", "Hello"); document.getElementsByClassName("slide-2")[0].innerHTML = res; }</pre><pre class="snippet-code-html lang-html prettyprint-override"> &lt;ul class="box1"&gt; &lt;li class="slide-1"&gt;001&lt;/li&gt; &lt;li class="slide-2"&gt;&lt;div data-rel="Text" class="slide-2"&gt;&lt;img src=".."&gt;&lt;/div&gt;Text&lt;/li&gt; &lt;li class="slide-3"&gt;003&lt;/li&gt; &lt;/ul&gt; &lt;ul class="box2"&gt; &lt;li class="slide-1"&gt;001&lt;/li&gt; &lt;li class="slide-2"&gt;&lt;div data-rel="Text" class="slide-2"&gt;&lt;img src=".."&gt;&lt;/div&gt;Text&lt;/li&gt; &lt;li class="slide-3"&gt;003&lt;/li&gt; &lt;/ul&gt;</pre></div></div><p></p><p> 它不起作用,因為"data-rel"與我要刪除的文本具有相同的值。</p><p> 我無法更改或刪除"data-rel"中的值。</p></div></li>

[英]How can I remove text in <li> and after <div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 BeautifulSoup 和 Selenium 在網站上找不到 div 或文本 如果不是&#39;div&#39;,請在&#39;li&#39;中找到.closest 如何從Div中找到每個li以及如何獲取每個li的文本 <li> 標簽? 如何在li&gt; div中查找特定字符串並將其隱藏 無法在 div 下添加按鈕 怎么去掉里面的文字<li>之后<div></div><div id="text_translate"><p>我想刪除&lt;li&gt;中的"Text" 。</p><p> 這是我的嘗試: </p><p></p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"><div class="snippet-code"><pre class="snippet-code-js lang-js prettyprint-override"> window.onload = function() { var str = document.getElementsByClassName("slide-2")[0].innerHTML; var res = str.replace("Text", "Hello"); document.getElementsByClassName("slide-2")[0].innerHTML = res; }</pre><pre class="snippet-code-html lang-html prettyprint-override"> &lt;ul class="box1"&gt; &lt;li class="slide-1"&gt;001&lt;/li&gt; &lt;li class="slide-2"&gt;&lt;div data-rel="Text" class="slide-2"&gt;&lt;img src=".."&gt;&lt;/div&gt;Text&lt;/li&gt; &lt;li class="slide-3"&gt;003&lt;/li&gt; &lt;/ul&gt; &lt;ul class="box2"&gt; &lt;li class="slide-1"&gt;001&lt;/li&gt; &lt;li class="slide-2"&gt;&lt;div data-rel="Text" class="slide-2"&gt;&lt;img src=".."&gt;&lt;/div&gt;Text&lt;/li&gt; &lt;li class="slide-3"&gt;003&lt;/li&gt; &lt;/ul&gt;</pre></div></div><p></p><p> 它不起作用,因為"data-rel"與我要刪除的文本具有相同的值。</p><p> 我無法更改或刪除"data-rel"中的值。</p></div></li> 使用document.getElementById找不到任何div 在JS中找不到DIV 使用 BeautifulSoup 抓取 fanduel,在 HTML 中找不到可見值 無法使用 appendChild 和 getElementById 將文本節點添加到 div 類
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM