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 相关文章推荐
python2.7删除文件夹和删除文件代码实例
Dec 18 Python
python实现telnet客户端的方法
Apr 15 Python
Python 正则表达式入门(中级篇)
Dec 07 Python
python使用两种发邮件的方式smtp和outlook示例
Jun 02 Python
Python实现的简单模板引擎功能示例
Sep 02 Python
python实现梯度下降算法
Mar 24 Python
numpy给array增加维度np.newaxis的实例
Nov 01 Python
启动Atom并运行python文件的步骤
Nov 09 Python
Python版名片管理系统
Nov 30 Python
Python3实现的反转单链表算法示例
Mar 08 Python
python构造IP报文实例
May 05 Python
python实现简易版学生成绩管理系统
Jun 22 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入门基础之php代码写法
2011/12/30 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
js 跳出页面的frameset框架示例介绍
2013/12/23 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
jQuery Validate表单验证入门学习
2015/12/18 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
详解python里使用正则表达式的分组命名方式
2017/10/24 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
详解python中的数据类型和控制流
2019/08/08 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
Python Json数据文件操作原理解析
2020/05/09 Python
python获取linux系统信息的三种方法
2020/10/14 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
商务英语专业自荐信
2013/10/14 职场文书
保研专家推荐信范文
2015/03/25 职场文书
学校隐患排查制度
2015/08/05 职场文书
爱国主义主题班会
2015/08/14 职场文书
浅谈JavaScript作用域
2021/12/06 Javascript
python中urllib包的网络请求教程
2022/04/19 Python