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 04 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
pycharm远程开发项目的实现步骤
Jan 20 Python
将python文件打包成EXE应用程序的方法
May 22 Python
Python中print函数简单使用总结
Aug 05 Python
python 图像处理画一个正弦函数代码实例
Sep 10 Python
python实现的登录与提交表单数据功能示例
Sep 25 Python
selenium+python配置chrome浏览器的选项的实现
Mar 18 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
Apr 07 Python
Python如何脚本过滤文件中的注释
May 27 Python
浅谈keras中的目标函数和优化函数MSE用法
Jun 10 Python
python机器学习Github已达8.9Kstars模型解释器LIME
Nov 23 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 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
php简单分页类实现方法
2015/02/26 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
JavaScript中实现继承的三种方式和实例
2015/01/29 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
js微信支付实现代码
2016/12/22 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
Angular4学习教程之DOM属性绑定详解
2018/01/04 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
vue内置指令详解
2018/04/03 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
node.js使用fs读取文件出错的解决方案
2019/10/23 Javascript
js仿360开机效果
2019/12/26 Javascript
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
Python 基础之字符串string详解及实例
2017/04/01 Python
PyTorch学习笔记之回归实战
2018/05/28 Python
Python selenium的基本使用方法分析
2019/12/21 Python
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
高三历史教学反思
2014/01/09 职场文书
运动会入场解说词300字
2014/01/25 职场文书
经济贸易系求职信
2014/08/04 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
通过Qt连接OpenGauss数据库的详细教程
2021/06/23 PostgreSQL