【发布时间】:2020-03-03 19:34:32
【问题描述】:
我编写了一个非常小的 Python 脚本,用于从 CNN 网站上抓取文章标题。
import requests
from bs4 import BeautifulSoup
url='https://edition.cnn.com/'
topics=['world','politics','business']
r=requests.get(url+topics[1])
soup=BeautifulSoup(r.content,'html.parser')
spans=soup.find_all('span',{'class':"cd__headline-text"})
print(spans)
执行此代码后,我只是得到一个空列表作为输出。这不是我所期望或寻找的,因为我试图刮掉标签后面的文本。我试图引用的 html 块的 sn-p 是-
<span class="cd__headline-text">
Bernie Sanders faces pivotal clash as Democratic establishment joins forces against him
</span>
请帮助澄清我的代码似乎做错了什么和/或我可能犯的任何逻辑错误。
【问题讨论】:
-
在使用
requests获取网站内容时要始终检查的几件事。你检查过网站的回复吗?r看起来像您期望的那样吗?那么,在尝试查找其中的任何内容之前,您是否检查过soup的内容?这两项检查可以告诉您您的get是否成功,以及该站点是完全以 html 加载,还是在访问时异步加载(后者可能与 CNN 一起),在这种情况下,您需要一个类似的工具selenium 浏览器自动化 -
嗨@G.Anderson!感谢您的答复 。我对我们报废比较陌生,所以我不确定异步加载意味着什么。你能详细说明一下吗?
-
可能值得快速 google,但高级概述:像 Ajax(异步 Java 和 XML)这样的框架仅在 Web 浏览器访问页面时动态加载页面。这既可以定制用户体验,又可以防止像我们不幸的网络抓取之类的事情。检查你的
soup,我敢打赌你只会看到几个 HTML 元素,因为除非浏览器点击它,否则页面的其余部分永远不会真正加载。 -
如果您的问题得到解决,请将答案标记为已接受,以便其他人可以看到您的问题已得到解答。
标签: python web-scraping beautifulsoup