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使用reportlab画图示例(含中文汉字)
Dec 03 Python
python使用cPickle模块序列化实例
Sep 25 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
python中文编码与json中文输出问题详解
Aug 24 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
详解PyTorch手写数字识别(MNIST数据集)
Aug 16 Python
python实现XML解析的方法解析
Nov 16 Python
Python实现把类当做字典来访问
Dec 16 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
Mar 23 Python
Python字典fromkeys()方法使用代码实例
Jul 20 Python
python flask开发的简单基金查询工具
Jun 02 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桌面中心(一) 创建数据库
2007/03/11 PHP
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
php数组的概述及分类与声明代码演示
2013/02/26 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python实现的文件同步服务器实例
2015/06/02 Python
python生成圆形图片的方法
2020/03/25 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
全球虚拟主机商:HostGator
2017/02/06 全球购物
Linux上比较文件的命令都有哪些
2012/02/24 面试题
构造方法和其他方法的区别
2016/04/26 面试题
运动会入场词100字
2014/02/06 职场文书
电工技术比武方案
2014/05/11 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
企业文化理念标语
2014/06/10 职场文书
学校师德师风整改方案
2014/10/28 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
文艺节目主持词
2015/07/06 职场文书
Java输出Hello World完美过程解析
2021/06/13 Java/Android
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL