上个月左右,我一直在学习python的基础知识,虽然我非常擅长打印“hello world”,但我想学习一些额外的功能。我已经下载了BeautifulSoup4并使用Python2.7。我的目标是能够从CNN或其他新闻来源获取一篇文章,并能够废弃4件事: 1) 链接到网站 2) 文章发表日期 3) 文章标题 4) 文章正文
我在stackoverflow中搜索了其他问题,并查看了其他示例代码,但在将其应用于我想做的事情时遇到了问题。我看到的大多数例子都是在浪费时间或天气。我的主要问题是,当我查看某个特定网站的源代码时,我很难知道应该使用什么标记。
例如,如果我想把上面4件事从: http://www.cnn.com/2013/10/29/us/florida-shooting-cell-phone-blocks-bullet/index.html?hpt=ju_c2
代码是什么样子的?
在页面本身中找不到页面的URL,但这不是问题,因为在获取页面之前您必须知道URL。
抓取是最强大的,当它是网站特定的:你需要检查(比如)CNN网站页面的格式,确定他们把文章日期放在哪里,通过检查html源在文档层次结构中找到你的方法,然后设计一种提取方法。
以最一般的方式,您最多可以识别一般类型的信息:您可以编写一个脚本,从页面中提取所有日期(或尽可能多的条件匹配),但没有一般的方法知道哪个代表发布日期。类似地,以一种真正通用的方式提取标题和文本充其量只是猜测,因为有很多方法可以将这些信息嵌入到网页中(以及网站可能与之混合的许多其他内容)。
最后,不要忘记许多站点(尽管不是所有站点)都会向您发送一个简单的html页面,并使用javascript填充内容。除非在尝试清理页面之前使用webkit之类的东西来解释javascript,否则脚本将看到与浏览器显示的非常不同的内容。
这是一个概念验证代码,让你的想法工作,只是让你知道,美化组4是非常强大的,它绝对足够你的第一阶段刮。
你还需要阅读CNN的服务条款,看看是否允许刮擦。您可以在BS4文档中找到下面代码的每个细节的解释,也可以从stackoverflow开始您的职业生涯,从社区中学习每个细节,就像我所做的那样:)祝您好运,并享受它!
输出如下:
同时,我对如何定位元素有一点看法:link here. 你可能会在以后遇到硒/碎屑。。
你需要做一些事情:
使用
urllib
或python-requests
下载网页用
BeautifulSoup4
(bs4
)解析页面通过开发人员工具(Ctrl+Shft+C)使用Chrome(或其他浏览器)确定要解析的网页部分,然后单击文章的文本正文,这将允许您查看要解析的HTML元素。在本例中,您可以看到您想要所有的HTML元素都具有类
cnn_storypgraphtxt
,您可以用soup.find_all("p", class_="cnn_storypgraphtxt")
选择这些类我相信你可以自己找出剩下的部分,至于包含日期和标题等元素的位置
相关问题 更多 >
编程相关推荐