python爬取网页并作简单处理(python2.7.1) 一

来源:互联网 发布:航拍测绘软件 编辑:程序博客网 时间:2024/06/04 19:39

   写在前面:最近这几天准备学习python,以前学过Android,但是因为一些原因并没有坚持下来。现在开始写博文,算是对自己的一种监督吧。记录学习,记录自己。

挫折是常有的希望你能坚强的度过。

目标

以豆瓣电影TOP250为目标,爬取目标中的中文电影名、评分、评论人数、最热评论(页面上简短的那个)。豆瓣电影TOP250网址:https://movie.douban.com/top250 。其他的网址我也试过但还是感觉这个最适合练习吧。
爬取前先应该看看网页源码,在任一电影评分处点右键查看元素,我们就能看到我们要爬取的数据在什么地方。虽然看不太懂网页代码,但是仔细研究一下还是对我们爬取有帮助的。我们需要的数据都在一个标签里,我们爬取的逻辑很简单:先把网页代码爬取下来,然后再对把这些标签里的东西拿出来就行。好了,大概就这样。

开始爬取

爬取网页代码,这里我用的是python2.7.13虽然比较古老但是人作为学习来说还是不错的,有许多博客和例子可以自学。爬取网页代码要用的函数在urllib2中,也用其他的库可以用。这个就看个人了。
#-*- coding:utf-8 -*-import urllib2import re#获得网页源码def urlPage(url):    try:        request = urllib2.Request(url)        reponse = urllib2.urlopen(request)        html = reponse.read()    except urllib2.URLError,e:        if hasattr(e,"code"):            print e.code        if hasattr(e,"reason"):            print e.reason    return html
其实爬取一个网页下面这两行代码就够了,但是为了保持稳定性还是写个异常捕捉吧
reponse = urllib2.urlopen(“'https://movie.douban.com/top250'”)html = reponse.read()
主要通过urlopen(url)和read()对网页代码进行下载和读取。read()的返回值为string类型,了解这个返回值类型对后面解析挺有帮助的。

简单预处理

简单解析就是对爬取下来的网页代码进行一个简单的预处理,因为爬取下来的源码中我们需要的只有一部分,其他的对于我们来说没啥用,留下来也会降低处理速度,所以还是处理掉的好。这里我们主要用到的是对字符串操作中的split()函数。要说明的一点是split(str)函数的返回值是一个列表。a.split(str)会在字符串a中用字符串str来分割,每一个分割的部分为列表中的一个元素。一个简单的例子来说明这一切:

#coding:utf-8a = 'tetasfafdansfasdfa'b = a.split('fa')print bprint type(b)
运行结果为:

['tetas', 'fdans', 'sd', '']<type 'list'>
如果不懂就可以试试,其实很多地方可以用print来看看它到底是个什么东西。好了,知道了原理我们就将它用到我们的代码中

#对获取来的代码进行预处理 去掉不必要的部分def dispose(htmlPage):    html = htmlPage.split('<ol class="grid_view">')    page = html[1].split('</ol>')    return page[0]
我们先用'<ol class="grid_view">'分割,这样我们会得到两部分,前面的是没用的。结果代码太长,就不贴了。自己每一步print一下就懂啥意思了。然后我们再用'</ol>'分割出html的前部分。所以用我们用page[0]。(多用代码试试就会懂的,其实并不难)。

然后用print就能看到预处理的结果了,这里只贴出来一个:

<li>            <div class="item">                <div class="pic">                    <em class="">1</em>                    <a href="https://movie.douban.com/subject/1292052/">                        <img alt="肖申克的救赎" src="https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p480747492.jpg" class="">                    </a>                </div>                <div class="info">                    <div class="hd">                        <a href="https://movie.douban.com/subject/1292052/" class="">                            <span class="title">肖申克的救赎</span>                                    <span class="title"> / The Shawshank Redemption</span>                                <span class="other"> / 月黑高飞(港)  /  刺激1995(台)</span>                        </a>                            <span class="playable">[可播放]</span>                    </div>                    <div class="bd">                        <p class="">                            导演: 弗兰克·德拉邦特 Frank Darabont   主演: 蒂姆·罗宾斯 Tim Robbins /...<br>                            1994 / 美国 / 犯罪 剧情                        </p>                                             <div class="star">                                <span class="rating5-t"></span>                                <span class="rating_num" property="v:average">9.6</span>                                <span property="v:best" content="10.0"></span>                                <span>876443人评价</span>                        </div>                            <p class="quote">                                <span class="inq">希望让人自由。</span>                            </p>                    </div>                </div>            </div>        </li>
这个里面就有我们想要的数据了。

保存预处理结果

将预处理的结果保存起来,其实不保存也可以。但是没网的时候就尴尬了。所以我准保存起来。保存其实挺简单的。我们只实现保存为.txt就行了。直接看代码

#保存文件def save(html):    fh = open("完整豆瓣爬虫.txt",'w')    fh.write(html)    fh.close()

这是主函数挺好懂的,看看吧
if __name__ == '__main__':    htmlPage = urlPage('https://movie.douban.com/top250')    real = dispose(htmlPage)    save(real)    print real
这样,我们想要的功能中爬取部分就实现了,接下来就是解析我们预处理的源码了。
原创粉丝点击