获取输出0,即使有25个相同的类

2024-04-18 15:17:11 发布

您现在位置:Python中文网/ 问答频道 /正文

Image of the HTML

Link to the page

我试图看看有多少类在这个页面上,但输出是0。我使用BeautifulSoup已经有一段时间了,但从未见过这样的错误。你知道吗

from bs4 import BeautifulSoup
import requests

result = requests.get("https://www.holonis.com/motivationquotes")
c = result.content

soup = BeautifulSoup(c)
samples = soup.findAll("div", {"class": "ng-scope"})
print(len(samples))

输出

0

我希望正确的输出至少超过25


Tags: ofthetoimageimporthtml错误page
3条回答

BeautifulSoup没有问题,实际上,GET请求的结果不包含任何ng-scope文本。你知道吗

您可以在这里看到输出:

>>> from bs4 import BeautifulSoup
>>> import requests
>>> 
>>> result = requests.get("https://www.holonis.com/motivationquotes")
>>> c = result.content
>>> 
>>> print(c)
**Verify the output yourself**

基本上,result.content不包含任何具有ng-scope类的div。正如其中一条注释所述,由于浏览器上运行的javascript,您试图获取的html被添加到了那里。你知道吗

我向您推荐这个由非常流行的requests作者创建的包requests-html。你知道吗

您可以尝试使用下面的代码来构建它。你知道吗

from requests_html import HTMLSession

session = HTMLSession()
r = session.get('https://www.holonis.com/motivationquotes')
r.html.render()

要查看有多少ng-scope类,只需执行以下操作:

>>> len(r.html.find('.ng-scope'))
302

我假设您想从a标记中删除所有href,这些标记是您将image交给的div的子级。您可以通过以下方式获得它们:

divs = r.html.find('[ng-if="!isVideo"]')
link_sets = (div.absolute_links for div in divs)

>>> list(set(chain.from_iterable(link_sets)))
['https://www.holonis.com/motivationquotes/o/byiqe-ydm',
 'https://www.holonis.com/motivationquotes/o/rkhv0uq9f',
 'https://www.holonis.com/motivationquotes/o/ry7ra2ycg',
 ...
 'https://www.holonis.com/motivationquotes/o/sydzfwgcz',
 'https://www.holonis.com/motivationquotes/o/s1eidcdqf']

这是一个基于角度的“动态”页面,需要一个Javascript引擎或浏览器才能完全加载。换言之,在浏览器开发工具中看到的HTML源代码与在result.content中看到的不同,后者是不包含所需数据的页面的未呈现初始HTML。你知道吗

您可以使用^{}这样的方法来呈现和加载页面,然后用HTML对其进行解析,但是,为什么不直接向站点API发出请求呢

import requests

result = requests.get("https://www.holonis.com/api/v2/activities/motivationquotes/all?limit=15&page=0")
data = result.json()

for post in data["items"]:
    print(post["body"]["description"])

检索和打印文章描述仅用于示例目的post词典包含网页上显示的所有其他相关文章数据。你知道吗

相关问题 更多 >