Python爬豆瓣电影实例


Posted in Python onFebruary 23, 2018

文件结构

Python爬豆瓣电影实例

html_downloader.py - 下载网页html内容

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import urllib2

class HtmlDownloader(object):

  def downlod(self, url):
    if url is None:
      return None
    response = urllib2.urlopen(url)
    if response.getcode() != 200:
      return None
    return response.read()

html_outputer.py - 输出结果到文件中

#!/usr/bin/python
# -*- coding: UTF-8 -*-


class HtmlOutputer(object):

  def collect_data(self, movie_data):
    if movie_data is None:
      return
    fout = open('output.html', 'a+')
    for data in movie_data:
      print data['name'] + '|', data['rate'] + '|', data['actor'], '\n'
      fout.write('%s,' % data['name'].encode('utf-8'))
      fout.write('%s,' % data['rate'])
      fout.write('%s\n' % data['actor'].encode('utf-8'))
    fout.close()

html_parser.py: 解析器:解析html的dom树

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup


class HtmlParser(object):

  def __init__(self):
    pass

  def parser_html(self, cnt):
    if cnt is None:
      return
    soup = BeautifulSoup(cnt, 'html.parser', from_encoding='utf-8')
    # movie_name, movie_desc, movie_rate =
    return self.get_movie_names(soup)

  def get_movie_names(self, soup):
    movie_data = []
    movie_all = soup.find('div', class_='article').find_next('table').find_next_sibling('div').find_next_sibling('div').find_all('table')
    count = 1
    for movie_one in movie_all:
      movie_data.append(self.get_movie_name(movie_one))
      # if count > 2:
      #   break
      count += 1
    return movie_data

  def get_movie_name(self, cnt):
    info = {}
    soup = BeautifulSoup(str(cnt), 'html.parser', from_encoding='utf-8')
    movie_one = soup.find('tr', class_='item').find_next('td').find_next_sibling('td').find('div', class_='pl2')
    info['name'] = movie_one.find('a').get_text().replace("\n", "").replace(" ", "")
    info['actor'] = movie_one.find('p', class_='pl').get_text().replace("\n", "").replace(" ", "")
    info['rate'] = movie_one.find('div', class_='star clearfix').find('span', class_='rating_nums').get_text()
    return info

spider_main.py - 主函数

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import html_parser, html_outputer, html_downloader


class SpiderMain(object):

  def __init__(self):
    self.parser = html_parser.HtmlParser()
    self.outputer = html_outputer.HtmlOutputer()
    self.downloader = html_downloader.HtmlDownloader()

  def craw(self, url):
    html_cnt = self.downloader.downlod(url)
    movie_data = self.parser.parser_html(html_cnt)
    self.outputer.collect_data(movie_data)


if __name__ == '__main__':
  url = 'https://movie.douban.com/tag/2017?start=100&type=T'
  spider = SpiderMain()
  spider.craw(url)

综述

其实就是使用了urllib2和BeautifulSoup库,没啥好说的,你也可以直接改url,然后更改html_parser.py文件来满足你自己的爬虫需求。当前也可以更改html_outputer.py来定义保存格式,目前是csv。

Python 相关文章推荐
python爬虫教程之爬取百度贴吧并下载的示例
Mar 07 Python
Python不规范的日期字符串处理类
Jun 10 Python
Python实现的使用telnet登陆聊天室实例
Jun 17 Python
Python如何生成树形图案
Jan 03 Python
python读取和保存视频文件
Apr 16 Python
解决nohup重定向python输出到文件不成功的问题
May 11 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
Jul 13 Python
Pandas之DataFrame对象的列和索引之间的转化
Jun 25 Python
解决Mac下使用python的坑
Aug 13 Python
python中通过selenium简单操作及元素定位知识点总结
Sep 10 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 Python
python 基于opencv 实现一个鼠标绘图小程序
Dec 11 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 #Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 #Python
python自动发邮件库yagmail的示例代码
Feb 23 #Python
Python KMeans聚类问题分析
Feb 23 #Python
浅谈python爬虫使用Selenium模拟浏览器行为
Feb 23 #Python
python kmeans聚类简单介绍和实现代码
Feb 23 #Python
python MysqlDb模块安装及其使用详解
Feb 23 #Python
You might like
php垃圾代码优化操作代码
2010/08/05 PHP
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
php封装一个异常的处理类
2017/06/08 PHP
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
JavaScript数组方法总结分析
2016/05/06 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
学习python的前途 python挣钱
2019/02/27 Python
python把1变成01的步骤总结
2019/02/27 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
大学校庆邀请函
2014/01/11 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
2014年电教工作总结
2014/12/19 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
高三教师工作总结2015
2015/07/21 职场文书
利用Python多线程实现图片下载器
2022/03/25 Python