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中使用第三方库xlutils来追加写入Excel文件示例
Apr 05 Python
python中循环语句while用法实例
May 16 Python
python实现发送和获取手机短信验证码
Jan 15 Python
基于python的字节编译详解
Sep 20 Python
matplotlib绘图实例演示标记路径
Jan 23 Python
Python聊天室程序(基础版)
Apr 01 Python
python脚本监控Tomcat服务器的方法
Jul 06 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
python字典嵌套字典的情况下找到某个key的value详解
Jul 10 Python
关于Pytorch的MLP模块实现方式
Jan 07 Python
基于Python计算圆周率pi代码实例
Mar 25 Python
Django前后端分离csrf token获取方式
Dec 25 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与C#分别格式化文件大小的代码
2011/05/14 PHP
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
js form action动态修改方法
2008/11/04 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
2013/04/02 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
浅析javascript中的事件代理
2015/11/06 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
2016/05/16 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
跟老齐学Python之Python安装
2014/09/12 Python
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
tensorflow如何批量读取图片
2019/08/29 Python
python实现图片上添加图片
2019/11/26 Python
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
商务英语专业应届毕业生求职信
2013/10/28 职场文书
经典公益广告词
2014/03/13 职场文书
企业安全隐患排查治理制度
2015/08/05 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
JS实现九宫格拼图游戏
2022/06/28 Javascript