Python 用美丽的汤抓取网页 - 遇到麻烦
Python Web Scraping with Beautiful Soup - Having Trouble
我正在使用 BeautifulSoup 尝试从 CNN 主页上的不同主题中提取顶部 link 或简单的顶部标题。我似乎在这里遗漏了一些东西,希望得到一些帮助。之前我也搞过一些网络爬虫,但总是遇到很多阻力,是一场艰苦的战斗。
在我看来,我需要的 links 最终存储在这样的地方:
<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 之后抓取 link 并将其附加到 www.cnn.com 的末尾,它会将我带到我需要的页面。我的问题是实际上抓住了 link。我试过各种形式来抓住它们。我当前的迭代如下:
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)
我的问题是它似乎只抓取了我实际需要的一小部分东西。我只看到两篇来自政治的文章, none 来自旅行等。如果能帮助我解决这个问题,我将不胜感激。我希望获取每个主题下的所有 link。现在我只是把政治或旅行作为入门的基础。
特别是,我希望能够指定主题(科技、旅游、政治等)并抓住这些头条新闻。我是否可以简单地获取 links 并使用它们从相应页面获取标题,或者只是从此处获取标题......我似乎无法做到。能够一次查看单个主题中的所有内容会很好,但事实证明找出如何缩小范围并不是很简单。
示例文章是 "IOS 9's Wi-Fi Assist feature costly",它可以在标签中找到。
我希望能够在主页上的“技术”标题下找到所有文章,并隔离这些标签以获取标题。此标题的标签如下所示:
<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?
我正在使用 BeautifulSoup 尝试从 CNN 主页上的不同主题中提取顶部 link 或简单的顶部标题。我似乎在这里遗漏了一些东西,希望得到一些帮助。之前我也搞过一些网络爬虫,但总是遇到很多阻力,是一场艰苦的战斗。
在我看来,我需要的 links 最终存储在这样的地方:
<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 之后抓取 link 并将其附加到 www.cnn.com 的末尾,它会将我带到我需要的页面。我的问题是实际上抓住了 link。我试过各种形式来抓住它们。我当前的迭代如下:
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)
我的问题是它似乎只抓取了我实际需要的一小部分东西。我只看到两篇来自政治的文章, none 来自旅行等。如果能帮助我解决这个问题,我将不胜感激。我希望获取每个主题下的所有 link。现在我只是把政治或旅行作为入门的基础。
特别是,我希望能够指定主题(科技、旅游、政治等)并抓住这些头条新闻。我是否可以简单地获取 links 并使用它们从相应页面获取标题,或者只是从此处获取标题......我似乎无法做到。能够一次查看单个主题中的所有内容会很好,但事实证明找出如何缩小范围并不是很简单。
示例文章是 "IOS 9's Wi-Fi Assist feature costly",它可以在标签中找到。 我希望能够在主页上的“技术”标题下找到所有文章,并隔离这些标签以获取标题。此标题的标签如下所示:
<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?