豆瓣热评电影爬取

来源:互联网 发布:淘宝考试虚拟类目下 编辑:程序博客网 时间:2024/04/27 17:00


豆瓣热评电影爬取

基础知识:

  1. url:
    1. url分为三部分,协议,路径,参数。例如http://blog.csdn/postedit?ref=toolbar&中http为url协议,blog.csdn为主机名,/postedi为路径。?后面的 为参数
    2. 参数以?开始,多个参数以&分割,参数中如果含有中文字符将编码为十六进制数,并在十六进制数前加%表示,参数格式为key=value
  2. cookie:
    1. 指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
    2. 在爬虫中我们如果想要爬取需要登录的页面,直接爬取是不行的。但是我们可以利用urllib2库保存我们登录的cookie,然后就可以进行抓取了。
    3. 这里需要注意cookie是服务器保存在客户端的数据,不由浏览器产生。
    4. 客户端发送cookie的格式为Cookie:key1=value1;key2=value2。服务器端保存cookie在客户端是格式为Set-Cookie:key1=value;path=/;domain=xx;
    5. Cookie的属性:Domain和Path:定义cookie的作用域,当指定domain时,这个domain及其子域名都会包含这个cookie。Expires:定义cookie的生命周期。HttpOnly:禁止脚本访问
  3. urllib库相关:

1.  urlopen(url,data,timeout):第一个参数即为url,第二个参数data是访问url时需要传送的数据,第三个timeout是设置超时时间。Data参数默认为None,timeout参数默认为spython爬虫python爬虫python爬虫python爬虫python爬虫python爬虫python爬虫python爬虫python爬虫

2.  response类:

1.read(size):读取指定大小的数据

2. readline():读取一行

3.readlines():读取多行

4.close():关闭

5.getcode():获取网站响应码

3.  urlretrieve(url,filename,reportbook,data):将远程数据下载到本地。参数filename指定保存本地路径,reportbook我回调函数(可以利用此函数显示下载进度),data为post到服务器的数据

4.  urlencode():对字符串中除了-_.之外的所以字非字母字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)

5.  urldecode():还原 URL 编码字符串

4.  urllib2库

提供了request方法,cookie处理,鉴权,但不含有urlencode

urlopen参数可以传入一个request请求,它其实就是一个Request类的实例,构造时需要传入Url,Data等等的内容。先request然后urlopen可以更好的使网站接受

5.  HTMLParser类

HTMLParser是python用来解析html和xhtml文件格式的模块。它可以分离出html里面的标签数据等内容。HTMLParser采用的是一种事件驱动的模式,当HTMLParser找到一个特定的标记时,它会去调用一个用户定义的函数,以此来通知程序处理。它主要的回调函数的命名都是handler_开头的,都HTMLParser的成员函数。当我们使用时,就从HTMLParser派生出新的类,然后重新定义这几个以handler_开头的函数即可。

HTMLParser.feed(data):提供一些文本给解析器。在由完整元素组成的限度内进行处理,不完整的数据被缓冲直到更多的数据提供或者close()被调用。

HTMLParser.close():关闭

HTMLParser.handle_starttag(tag,attrs) :该方法用来处理开始标签。其目的是被派生类重写;基类什么也不实现。tag参数是转换成小写的标签名称。attrs参数是一个(name,value)对包含了在标签<>中得属性。name将会转换成小写,并且value中得引号会被引出,并且字符串和实体引用将会被替代

HTMLParser.handle_startendtag(tag,attrs) :类似于handle_starttag(),不过用来处理遇到XHTML风格的空标签(<a .../>)


实现步骤:

  1. 确定爬取目标:实现对豆瓣热评电影电影名称,评分,上映时间,导演,演员相关信息的爬取
  2. 分析网页结构:用firefox的开发者工具箱确定到爬取目标在网页中发位置
  3. 编写代码
import urllib.requestfrom html.parser import HTMLParser  class MovieParser(HTMLParser):    def __init__(self):        HTMLParser.__init__(self)        self.movies = []        def handle_starttag(self,tag,attrs):        def _attr(attrslist,attrname):            for attr in attrslist:                if attr[0] == attrname:                    return attr[1]            return None                       if tag == 'li' and _attr(attrs,'data-title') and _attr(attrs,'data-category') == 'nowplaying':            movie = {}            movie['title'] = _attr(attrs,'data-title')            movie['score'] = _attr(attrs,'data-score')            movie['release'] = _attr(attrs,'data-release')            movie['director'] = _attr(attrs,'data-director')            movie['actors'] = _attr(attrs,'data-actors')            self.movies.append(movie)            def later_movie(url):    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}    req = urllib.request.Request(url,headers=headers)    s = urllib.request.urlopen(req)    content = s.read().decode('utf-8')#request返回字节,feed需要字符串    parser = MovieParser()    parser.feed(content)    s.close()    return parser.movies                                             if __name__ == '__main__':    url = 'http://movie.douban.com/nowplaying/xiamen/'    movies = later_movie(url)    for movie in movies:        print('%(title)s|%(score)s|%(release)s|%(director)s|%(actors)s' % movie)

结果截图:



1 0
原创粉丝点击