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 学习笔记
Dec 27 Python
python Django连接MySQL数据库做增删改查
Nov 07 Python
python flask实现分页的示例代码
Aug 02 Python
selenium+python实现1688网站验证码图片的截取功能
Aug 14 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
Jan 06 Python
Python日期格式和字符串格式相互转换的方法
Feb 18 Python
没编程基础可以学python吗
Jun 17 Python
Python sublime安装及配置过程详解
Jun 29 Python
用python写爬虫简单吗
Jul 28 Python
python实现会员管理系统
Mar 18 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中养成7个面向对象的好习惯
2010/07/17 PHP
让PHP以ROOT权限执行系统命令的方法
2011/02/10 PHP
Look And Say 序列php实现代码
2011/05/22 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
js 数组实现一个类似ruby的迭代器
2009/10/27 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
jQuery动画animate方法使用介绍
2013/05/06 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
js实现ATM机存取款功能
2020/10/27 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
python抓取百度首页的方法
2015/05/19 Python
Python中type的构造函数参数含义说明
2015/06/21 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
python实现机器学习之多元线性回归
2018/09/06 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
Tensorflow累加的实现案例
2020/02/05 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
西部世纪.net笔试题面试题
2014/04/03 面试题
2014大学生批评与自我批评思想汇报
2014/09/21 职场文书
爱心捐助活动总结
2015/05/09 职场文书
防卫过当辩护词
2015/05/21 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
《亲亲我的妈妈》观后感(3篇)
2019/09/26 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL