我试图从这个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")
我已经测试了很多方法来获得这个,但似乎网页锁定这一点。任何想法来解决这个问题的家伙,我会很感激。非常感谢
3条答案
按热度按时间hxzsmxv21#
问题是页面动态加载新闻。您需要使用**_GetPortadaPrincipal和_GetNoticiasDestacadas**方法来获取您需要的新闻
输出
或者你可以得到这样的推荐新闻:
输出
8zzbczxx2#
嘿,我试着从beautifulsoup获取整个页面,发现我得到的是页面的 backbone 版本,正如你在图片中看到的。我从我的浏览器复制了所有的标题,它仍然是一样的,所以我猜这是因为有一些功能从刮板失踪:没有cookie,没有JavaScript,不同的屏幕大小,等等.你可以试着在美味的汤里加点这个。或者使用无头浏览器。
jljoyd4f3#
它不起作用,因为页面内容是从它们的API动态加载的。这意味着当你最初使用bs4访问网站时,内容还不存在,因此div.text返回空。
如果您从浏览器的开发人员工具中检查网络日志,则可以检查数据是从哪些端点获取的:
你可以使用selenium这样的库来抓取网站,你可以在其中抓取加载内容的页面,或者从它们的API获取你需要的数据。