BeautifulSoup与python无法获取span标记的值

raogr8fs  于 2023-10-15  发布在  Python
关注(0)|答案(3)|浏览(99)

我试图从这个web page的主要名义新闻中获得价值

下面是我的代码:

news = ""
headers = {
    "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0"
}

url = "https://elperuano.pe/"

soup = BeautifulSoup(requests.get(url, headers=headers).content, 'html.parser')

#Obtener noticia principal
for div in soup.findAll('span', attrs={'class':'card-title fz18 lh30 fw500 width100'}):
    print(div.text)

这是一个唯一的span标签,具有类名“card-title fz 18 lh 30 fw 500 width 100”。我不知道为什么这行不通。然而,如果试图获得报纸的日期的值,这一工作:

for div in soup.findAll('div', attrs={'class':'lh18'}):
    n = div.text.rstrip("\n\n")

我已经测试了很多方法来获得这个,但似乎网页锁定这一点。任何想法来解决这个问题的家伙,我会很感激。非常感谢

hxzsmxv2

hxzsmxv21#

问题是页面动态加载新闻。您需要使用**_GetPortadaPrincipal_GetNoticiasDestacadas**方法来获取您需要的新闻

import requests

principal_news = requests.get('https://elperuano.pe/Portal/_GetPortadaPrincipal').json()
print('Title:', principal_news['vchTitulo'].strip())
print('Description:', principal_news['vchDescripcion'].strip())

输出

Title: Presidenta Dina Boluarte invita a empresarios alemanes a invertir en el país
Description: La presidenta de la República, Dina Boluarte, se reunió en Alemania con un grupo de empresarios y directivos de ese país, a quienes invitó a invertir en el Perú.

或者你可以得到这样的推荐新闻:

import requests

recommended_news = requests.get('https://elperuano.pe/Portal/_GetNoticiasDestacadas').json()
for news in recommended_news:
    print('Title:', news['vchTitulo'].strip())
    print('Description:', news['vchDescripcion'].strip())
    print('*' * 10)

输出

Title: Presidenta Dina Boluarte resalta lazos entre Perú y Alemania
Description: La presidenta de la República, Dina Boluarte, destacó los lazos entre Perú y Alemania, y reiteró su invitación a los inversionistas del país europeo, resaltando las fortalezas económicas peruanas.
**********
Title: Cancillería: avión presidencial parte este viernes a Israel para evacuar a connacionales
Description: El Ministerio de Relaciones Exteriores informó que se hará uso del avión presidencial para evacuar de Israel a nuestros connacionales que aún permanecen en dicho país.
**********
Title: Premier Otárola: "no escatimaremos esfuerzos para repatriar a los peruanos en Israel"
Description: El presidente del Consejo de Ministros, Alberto Otárola, sostuvo que el Gobierno ha realizado el empadronamiento de los peruanos que están varados en Israel y está en condiciones de comunicar serán repatriados en el avión presidencial, protegiendo su vida e integridad
**********
Title: Jefe del Gabinete se reunió con autoridades del Callao y el Cusco
Description: El jefe del Gabinete Ministerial, Alberto Otárola, se reunió con los autoridades municipales de la Mancomunidad Municipal del Callao, y de la provincia cusqueña de Chumbivilcas, con quienes coordinó las necesidades de sus respectivas jurisdicciones para canalizarlas.
**********
Title: Presidenta Boluarte despacha con Ministros a través de medios tecnológicos
Description: La presidenta Dina Boluarte sostuvo una reunión con ministros de Estado a través de los medios tecnológicos, con la finalidad de seguir atendiendo el Despacho Presidencial, en un alto de sus actividades oficiales en Alemania.
**********
Title: Jefa del Estado sostiene encuentro con alcalde de Stuttgart en Alemania
Description: La presidenta Dina Boluarte se reunió con el alcalde de Stuttgart, Alemania, Frank Nopper, dando inicio a sus actividades oficiales en ese país.
8zzbczxx

8zzbczxx2#

嘿,我试着从beautifulsoup获取整个页面,发现我得到的是页面的 backbone 版本,正如你在图片中看到的。我从我的浏览器复制了所有的标题,它仍然是一样的,所以我猜这是因为有一些功能从刮板失踪:没有cookie,没有JavaScript,不同的屏幕大小,等等.你可以试着在美味的汤里加点这个。或者使用无头浏览器。

jljoyd4f

jljoyd4f3#

它不起作用,因为页面内容是从它们的API动态加载的。这意味着当你最初使用bs4访问网站时,内容还不存在,因此div.text返回空。
如果您从浏览器的开发人员工具中检查网络日志,则可以检查数据是从哪些端点获取的:

你可以使用selenium这样的库来抓取网站,你可以在其中抓取加载内容的页面,或者从它们的API获取你需要的数据。

相关问题