近期在研究py的网络编程,编写爬虫也是顺利成章的,开始在纠结与用正则表达式来匹配,到后来发现了Beautifulsoup,用他可以非常完美的帮我完成了这些任务:
Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。
简单使用说明:
>>> from bs4 import BeautifulSoup >>> html_doc = """ ... <html><head><title>The Dormouse's story</title></head> ... ... <p class="title"><b>The Dormouse's story</b></p> ... ... <p class="story">Once upon a time there were three little sisters; and their names were ... <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>, ... <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and ... <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; ... and they lived at the bottom of a well.</p> ... ... <p class="story">...</p> ... """ >>> soup = BeautifulSoup(html_doc) >>> soup.head() [<title>The Dormouse's story</title>] >>> soup.title <title>The Dormouse's story</title> >>> soup.title.string u"The Dormouse's story" >>> soup.body.b <b>The Dormouse's story</b> >>> soup.body.a <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a> >>> soup.get_text() u"... The Dormouse's story\n... \n... The Dormouse's story\n... \n... Once upon a time there were three little sisters; and their names were\n... Elsie,\n... Lacie and\n... Tillie;\n... and they lived at the bottom of a well.\n... \n... ...\n... " >>> soup.find_all('a') [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] >>> for key in soup.find_all('a'): ... print key.get('class'),key.get('href') ... ['sister'] http://example.com/elsie ['sister'] http://example.com/lacie ['sister'] http://example.com/tillie
###通过里面的方法,可以很快调出里面的元素和结果:
简单说明:
soup.body:表示显示body标签下面的内容,也可以用.来叠加标签:
soup.title.string:表示现在titile的文本内容
soup.get_text():表示显示所有文本内容:
soup.find_all():方式可以随意组合,也可以通过任意标签,包括class,id 等方式:
举例说明:以我常常看的直播表新闻为例;
1、首先看看我们要获得的内容:
我要获取的是上面那一栏热点新闻:如世预赛国足不敌卡塔而
2、源代码查看:
<div class="fb_bbs"><a href="http://news.zhibo8.cc/zuqiu/" style="padding: 0 5px 0 0;" target="_blank" title="足球新闻"><img src="/css/p_w_picpaths/football.png"/></a><span><a href="http://news.zhibo8.cc/zuqiu/" target="_blank"><font color="red"> 世预赛:国足0-1不敌卡塔 尔</font></a>|<a href="http://news.zhibo8.cc/zuqiu/2015-10-09/5616a910d74ac.htm" target="_blank">国足“刷卡”耻辱:11年不胜</a>|<a hf="http://news.zhibo8.cc/zuqiu/2015-10-09/5616b22cbd134.htm" target="_blank">切尔西签下阿梅利亚</a>|<a href="http://news.zhibo8.cc/zuqiu/2015-10-09/5616daa45ee48.htm" target="_blank">惊人!莱万5场14球</a>|<a href="http://tu.zhibo8.cc/zuqiu/" target="_blank">图-FIFA16中国球员</a></span></div>
###从源码看到,这个是一个div 标签包裹的一个class=“fb_bbs”的版块,当然我们要确保这个是唯一的。
3、用BeautifulSoup来分析出结果代码如下:
#coding=utf-8 import urllib,urllib2 from bs4 import BeautifulSoup try: html = urllib2.urlopen("http://www.zhibo8.cc") except urllib2.HTTPError as err: print str(err) soup = BeautifulSoup(html) for i in soup.find_all("div",attrs={"class":"fb_bbs"}): result = i.get_text().split("|") for term in result: print term 4、执行效果: [root@master network]# python url.py 世预赛:国足0-1不敌卡塔尔 国足“刷卡”耻辱:11年不胜 切尔西签下阿梅利亚 惊人!莱万5场14球 图-FIFA16中国球员 利物浦官方宣布克洛普上任 档案:克洛普的安菲尔德之旅 欧预赛-德国爆冷0-1爱尔兰 葡萄牙1-0胜丹麦 图-穆帅难罢手 到此任务差不多完成,代码量比re模块少了很多,而且简洁唯美,用py做爬虫确实是个利器;