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 相关文章推荐
Django静态资源URL STATIC_ROOT的配置方法
Nov 08 Python
python使用多线程不断刷新网页的方法
Mar 31 Python
python与C互相调用的方法详解
Jul 14 Python
python使用Tkinter实现在线音乐播放器
Jan 30 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 Python
利用OpenCV和Python实现查找图片差异
Dec 19 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
Python中os模块功能与用法详解
Feb 26 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 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 翻页 实例代码
2009/08/07 PHP
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
在Vue中使用highCharts绘制3d饼图的方法
2018/02/08 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
使用sklearn之LabelEncoder将Label标准化的方法
2018/07/11 Python
利用Django提供的ModelForm增删改数据的方法
2019/01/06 Python
python中eval与int的区别浅析
2019/08/11 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
实例讲解利用HTML5 Canvas API操作图形旋转的方法
2016/03/22 HTML / CSS
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
汇源肾宝广告词
2014/03/20 职场文书
企业安全生产责任书范本
2014/07/28 职场文书
个人合作协议范本
2015/08/06 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python