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调用windows api锁定计算机示例
Apr 17 Python
简单解析Django框架中的表单验证
Jul 17 Python
横向对比分析Python解析XML的四种方式
Mar 30 Python
python 循环while和for in简单实例
Aug 16 Python
python基础之包的导入和__init__.py的介绍
Jan 08 Python
Python SELENIUM上传文件或图片实现过程
Oct 28 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
Python实现名片管理系统
Feb 14 Python
Python调用shell cmd方法代码示例解析
Jun 18 Python
如何使用python socket模块实现简单的文件下载
Sep 04 Python
python 发送get请求接口详解
Nov 17 Python
Python 如何解决稀疏矩阵运算
May 26 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/09/24 PHP
php foreach 参数强制类型转换的问题
2010/12/10 PHP
解析PHP处理换行符的问题 \r\n
2013/06/13 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
extjs form textfield的隐藏方法
2008/12/29 Javascript
js 操作css实现代码
2009/06/11 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
JS实现打字游戏
2019/12/17 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
wxpython 学习笔记 第一天
2009/02/09 Python
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
Python Socket编程入门教程
2014/07/11 Python
Python 自动补全(vim)
2014/11/30 Python
Python读取键盘输入的2种方法
2015/06/16 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
Python 在局部变量域中执行代码
2020/08/07 Python
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
什么是接口(Interface)?
2013/02/01 面试题
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
高中体育课教学反思
2016/02/16 职场文书