使用 Beautiful Soup 进行 Python 网页抓取 - 遇到麻烦

标签 python web-scraping beautifulsoup

我正在使用 BeautifulSoup 尝试从 CNN 主页上的不同主题中提取热门链接或简单的头条新闻。我似乎在这里遗漏了一些东西,希望得到一些帮助。我之前曾设法想出一些网络爬虫,但它总是经历很多阻力,而且是一场艰苦的战斗。

在我看来,我需要的链接最终存储在这样的地方:

<article class="cd cd--card cd--article cd--idx-1 cd--extra-small cd--has-siblings cd--media__image" data-vr-contentbox="/2015/10/02/travel/samantha-brown-travel-channel-feat/index.html" data-eq-pts="xsmall: 0, small: 300, medium: 460, large: 780, full16x9: 1100" data-eq-state="small">

我可以在 data-vr-contentbox 之后获取该链接,并将其附加到 www.cnn.com 的末尾,它会将我带到我需要的页面。我的问题是实际获取该链接。我尝试过各种形式来捕获它们。我当前的迭代如下:

r = requests.get("http://www.cnn.com/")

data = r.text
soup = BeautifulSoup(data)

for link in soup.findAll("article"):
    test = link.get("data-vr-contentbox")
    print(test)

我的问题是,它似乎只捕获了我真正需要的一小部分东西。我只看到两篇来自政治的文章,没有一篇来自旅行等的文章。我希望能得到一些帮助来解决这个问题。我希望获取每个主题下的所有链接。现在我只是把政治或旅行作为开始的基础。

特别是,我希望能够指定主题(科技、旅行、政治等)并捕获这些头条新闻。我是否可以简单地抓取链接并使用它们从相应页面获取标题,或者只是从这里获取标题......我似乎无法做到这一点。如果能够同时查看单个主题中的所有内容,那就太好了,但事实证明,找出如何缩小范围的方法并不简单。

示例文章是“IOS 9 的 Wi-Fi Assist 功能成本高昂”,可以在标签中找到。 我希望能够找到主页上“技术”标题下的所有文章,并隔离这些标签以获取标题。该标题的标签如下所示:

<div class="strip-rec-link-title ob-tcolor">IOS 9's Wi-Fi Assist feature costly</div>

但我不知道如何做这两件事。我什至无法捕获标题,尽管当我尝试这样做时它位于标签内:

for link in soup.findAll("div"):
    print("")
    print(link)

我觉得我在某个地方有一个根本性的误解,尽管我之前已经成功地做过一些抓取。

最佳答案

我的猜测是 cnn.com 网站有一堆 javascript,在 beautifulsoup 读取后会呈现很多内容。我打开 cnn.com 并在 safari 中查看源代码,发现有 197 个 data-vr-contentbox 实例。然而,当我通过 beautifulsoup 运行它并将其转储出来时,只有 13 个 data-vr-contentbox 实例。

有很多关于处理它的帖子。可以从本题使用的方法入手:Scraping Javascript driven web pages with PyQt4 - how to access pages that need authentication?

关于使用 Beautiful Soup 进行 Python 网页抓取 - 遇到麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32939734/

相关文章:

python - django使用xlrd读取批量excel文件太慢

python-3.x - 在python 3中使用requests.get获取数据之前等待页面加载

python - Pandas read_html 值错误 : No tables found

Python ASCII 编解码器在写入 CSV 时无法编码字符错误

python - Pandas 中的空数据框

python - 调整 wxPython wx.Panel 的大小?

python - 如何让 .to_datetime() 停止在字符串中按 UTC 偏移

python - 在 Windows 机器上安装 Theano

python - 如何在Python中忽略同一div但不同类中的文本

python - 使用 beautifulsoup 提取 url 和标题