2015-10-05 131 views
1

我使用BeautifulSoup来尝试拉顶部链接或只是从CNN主页上不同主题的头条新闻。我似乎在这里失去了一些东西,并希望得到一些帮助。我之前设法想出了一些网络扫描器,但它总是经历了很多阻力,并且是一场艰苦的战斗。Python网页刮美丽的汤 - 有问题

它是什么样子对我来说,我需要的链接被最终存储这样的地方:

<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"> 

我可以抓住数据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辅助功能代价高昂”。 我希望能够在主页上的技术标题下找到所有文章,并隔离这些标签以获取标题。这个标题的标签是这样的:

<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) 

我觉得我有一个根本性的误解的地方,虽然我已经成功之前做一些铲运机。

回答

1

我的猜测是cnn.com网站有一堆javascript,它在美丽的人读到它后呈现大量的内容。我打开cnn.com并在safari中查看源代码,并且有197个data-vr-contentbox的实例。但是,当我通过美丽的方式运行它并将其抛出时,只有13个实例data-vr-contentbox

有一堆关于处理它的帖子。您可以从此问题中使用的方法开始:Scraping Javascript driven web pages with PyQt4 - how to access pages that need authentication?