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 相关文章推荐
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
简单介绍Python下自己编写web框架的一些要点
Apr 29 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
Python 多进程并发操作中进程池Pool的实例
Nov 01 Python
详解python上传文件和字符到PHP服务器
Nov 24 Python
python实现聚类算法原理
Feb 12 Python
Python简单生成随机数的方法示例
Mar 31 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
Jul 17 Python
Python 堆叠柱状图绘制方法
Jul 29 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
Python Selenium 设置元素等待的三种方式
Mar 18 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 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实现源代码加密的方法
2015/07/11 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
javascript代码运行不出来执行错误的可能情况整理
2013/10/18 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
vue中轮训器的使用
2019/01/27 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
Python使用MD5加密字符串示例
2014/08/22 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
python 查找字符串是否存在实例详解
2017/01/20 Python
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
2014元旦晚会策划方案
2014/02/19 职场文书
安全生产标语大全
2014/10/06 职场文书
学生违反校规检讨书
2014/10/28 职场文书
喋血孤城观后感
2015/06/08 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
介绍一下28个JS常用数组方法
2022/05/06 Javascript