新闻文本爬取方法及流程

主要尝试了基于python第三方库Beautiful Soup来做网站新闻的爬取,Beautiful Soup提供了一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能,自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。
Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。
安装命令:pip install beautifulsoup4
Beautiful Soup除了支持Python标准库中的HTML解析器,还支持一些第三方的解析器,各个解释器比较如下:

解析器 调用方法 优缺点
Python标准库 BeautifulSoup(html, “html.parser”) 内置标准库,执行速度适中,文档容错能力强;Python 2.7.3/3.2.2前的版本中文档容错能力差
lxml HTML 解析器 BeautifulSoup(html, “lxml”) 速度快,文档容错能力强;需要安装第三方库
lxml XML 解析器 BeautifulSoup(markup, “xml”) 速度快,唯一支持XML的解析器
html5lib BeautifulSoup(html, “html5lib”) 最好的容错性,以浏览器的方式解析文档,生成HTML5格式的文档;速度慢

文本爬取示例

爬取标题及正文链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def get_html_soup(url):#获取解编码后的HTML
html = None
request = urllib2.Request(url)
try:
html = urllib2.urlopen(request)
except Exception, e:
soup = None
else:
soup = BeautifulSoup(html, 'lxml')
return soup
def get_title_link(url):#获取新闻的标题和正文链接
soup = get_html_soup(url)
if soup == None:
return None
news_link = {}
for link in soup.find_all("a", href=re.compile("http://")):
if len(link.get_text().strip()) > 0 and link.get("href")!= -1:
news_link[link.get_text().decode('utf-8')] = link.get('href')
return news_link

通过上述函数可以爬取当前页面所有的新闻标题和正文链接,如url为http://www.news.cn/fashion/
时,通过BeautifulSoup解析出来的soup如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<li class="clearfix">
<h3><a href="http://news.xinhuanet.com/fashion/2017-05/23/c_1121013376.htm" target="_blank">陈正飞开启戛纳之行 机场街拍两套LOOK尽显型男范</a></h3>
<i class="imgs"><a href="http://news.xinhuanet.com/fashion/2017-05/23/c_1121013376.htm" target="_blank"><img class="lazyload" data-original="http://www.xinhuanet.com/fashion/titlepic/112101/1121013376_1495422832344_title0h.jpg" src="http://www.news.cn/images2014/xh_load.gif"/></a></i>
<p class="summary">近日,陈正飞乘机飞往戛纳,应邀参加第70届戛纳国际电影节。日前,他的一组机场街拍大片在网上得以曝光,在这组照片中,陈正飞以两套潮范儿十足的look入镜,举手顿足之间挥洒着型男魅力。</p>
<div class="info">
<div class="bdsharebuttonbox clearfix"> </div>
<span class="time">2017-05-23</span>
</div>
</li>
<li class="clearfix">
<h3><a href="http://news.xinhuanet.com/fashion/2017-05/23/c_1121013263.htm" target="_blank">王力可曝时尚大片 梦幻粉色空间温婉</a></h3>
<i class="imgs"><a href="http://news.xinhuanet.com/fashion/2017-05/23/c_1121013263.htm" target="_blank"><img class="lazyload" data-original="http://www.xinhuanet.com/fashion/titlepic/112101/1121013263_1495422527151_title0h.jpg" src="http://www.news.cn/images2014/xh_load.gif"/></a></i>
<p class="summary">近日,王力可曝光了一组时尚写真大片,大片中王力可置身梦幻粉色空间,眼眸清澈笑容恬淡,清新气息扑面而来,尽显温婉迷人气质。</p>
<div class="info">
<div class="bdsharebuttonbox clearfix"> </div>
<span class="time">2017-05-23</span>
</div>
</li>
<li class="clearfix">
<h3><a href="http://news.xinhuanet.com/fashion/2017-05/22/c_1121002114.htm" target="_blank">李一桐白色连衣裙白系单品演绎清爽一夏</a></h3>
<i class="imgs"><a href="http://news.xinhuanet.com/fashion/2017-05/22/c_1121002114.htm" target="_blank"><img class="lazyload" data-original="http://www.xinhuanet.com/fashion/titlepic/112100/1121002114_1495173252350_title0h.jpg" src="http://www.news.cn/images2014/xh_load.gif"/></a></i>
<p class="summary">近日,新黄蓉·李一桐拍摄了一组杂志大片。在这组大片中,李一桐穿着白色蝴蝶结连衣裙、白色蕾丝连衣裙,以及白色衬衫、长裙及腰封。</p>
<div class="info">
<div class="bdsharebuttonbox clearfix"> </div>

通过调用soup的查找函数查找标签,输出标题和对应链接如下:

1
2
3
4
5
6
7
8
9
10
11
12
Linda联手知名设计师 转型服装设计“处女秀”http://news.xinhuanet.com/fashion/2017-05/23/c_1121013421.htm
陈正飞开启戛纳之行 机场街拍两套LOOK尽显型男范http://news.xinhuanet.com/fashion/2017-05/23/c_1121013376.htm
你心目中最具影响力中国品牌http://www.xinhuanet.com/tech/zt/2017zgppr/index.htm
接连收购 欧舒丹加入彩妆拉锯战http://news.xinhuanet.com/fashion/2017-05/23/c_1121013614.htm
健康的生活习惯能帮助你预防减少皱纹http://news.xinhuanet.com/fashion/2017-05/23/c_1121002286.htm
提升本土皮具品牌影响力培养设计专业人才是关键http://www.xinhuanet.com/fashion/xhhkt/20170517a/index.htm
任嘉伦蓝条纹衬衫搭配阔腿工装裤演绎慵懒时髦http://news.xinhuanet.com/fashion/2017-05/22/c_1121000943.htm
机遇大问题多 奢侈品电商发展前路漫漫http://news.xinhuanet.com/fashion/2017-05/23/c_1120923684.htm
点燃夏日“唇”情 驾驭妆容中的浓墨重彩http://news.xinhuanet.com/fashion/2017-05/23/c_1121002168.htm
李治廷登杂志封面 造型多变驾驭不同风格http://news.xinhuanet.com/fashion/2017-05/23/c_1121013452.htm
虚胖实肥你到底能分得清楚吗?http://news.xinhuanet.com/fashion/2017-05/23/c_1121002284.htm
迪卡侬推出移动鞋柜快闪http://news.xinhuanet.com/fashion/2017-05/23/c_1121013618.htm

爬取新闻正文

1
2
3
4
5
6
7
8
9
10
def get_news_body(url):#抓取新闻主体内容
content_text = []
soup = get_html_soup(url)
if soup == None:
return None
for content in soup.find_all("p"):
if len(content.get_text().strip()) > 0:
content_text.append(content.get_text().strip())
print content.get_text().decode('utf-8')
return content_text

输出的soup如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE HTML>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/><meta content="1121013421.11.2.0" name="publishid"/><meta content="11192.11145.0.0.11110213.0.0.0.0.0.112879.1121013421" name="pageid"/>
<meta content="yes" name="apple-mobile-web-app-capable"/>
<meta content="black" name="apple-mobile-web-app-status-bar-style"/>
<meta content="telephone=no" name="format-detection"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no" name="viewport"/>
<meta content="" name="keywords"/>
<meta content="Linda联手知名设计师 转型服装设计“处女秀”---日前,时尚女主播Linda微博晒出其赴澳洲亲自操刀设计服装的花絮照。" name="description"/>
<script src="http://www.xinhuanet.com/global/js/pageCore.js"></script>
<title>
Linda联手知名设计师 转型服装设计“处女秀”-新华网
</title>
<link href="http://www.xinhuanet.com/global/public/css/common.css" rel="stylesheet"/>
<link href="http://www.xinhuanet.com/global/css/swiper2.min.css" rel="stylesheet"/>
<link href="http://www.newsres.cn/xl2017/css/main.css" rel="stylesheet" type="text/css"/>
<script src="http://www.xinhuanet.com/global/js/jquery.min.js" type="text/javascript"></script>
<!--访问量通用js设置-->
<script type="text/javascript">
//锁定域名
document.domain="xinhuanet.com";
</script>
<script src="http://www.xinhuanet.com/video/static/videovisit.js"></script>
<!--访问量通用js设置-->
</head>

依然是通过soup的查找函数查找文章的标签,输出正文:

1
2
  日前,时尚女主播Linda微博晒出其赴澳洲亲自操刀设计服装的花絮照,并配文表示“设计的关键在于细节,今天和设计师最终确定了面料、款式、裁剪等的更多细节,设计的快感来自于源源不断的自我挑战,我很享受这些来自工作的乐趣,阿德莱德天气太给力!”
  据悉,Linda此次赴澳参加时装秀活动,并与知名品牌设计师跨界合作,完成Linda的设计师“处女秀”。

具体代码地址:
https://github.com/dreamocean/webspider

如果觉得我的文章对您有用,请随意赞赏