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之入门(三)序列
May 25 Python
python opencv实现运动检测
Jul 10 Python
Python实现多线程的两种方式分析
Aug 29 Python
Python提取特定时间段内数据的方法实例
Apr 01 Python
PYQT5实现控制台显示功能的方法
Jun 25 Python
简单了解django缓存方式及配置
Jul 19 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 Python
Python+Redis实现布隆过滤器
Dec 08 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
TensorFLow 不同大小图片的TFrecords存取实例
Jan 20 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
Jan 28 Python
tensorflow2.0保存和恢复模型3种方法
Feb 03 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初始化对象和析构函数的简单实例
2014/03/11 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
jquery中this的使用说明
2010/09/06 Javascript
jquery 实现表单验证功能代码(简洁)
2012/07/03 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
Node.js中常规的文件操作总结
2016/10/13 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
javascript验证香港身份证的格式或真实性
2017/02/07 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
vuejs点击class变化的实例
2018/09/05 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
Django视图和URL配置详解
2018/01/31 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
详解Python中的测试工具
2019/06/09 Python
sklearn+python:线性回归案例
2020/02/24 Python
python re的findall和finditer的区别详解
2020/11/15 Python
海蓝之谜(LA MER)澳大利亚官方商城:全球高端奢华护肤品牌
2017/10/27 全球购物
大学生学业生涯规划
2014/01/05 职场文书
班级聚会策划书
2014/01/16 职场文书
女儿十岁生日答谢词
2014/01/27 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
大学生优秀自荐信范文
2014/02/25 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书
超市采购员岗位职责
2015/04/07 职场文书
cf战队宣传语
2015/07/13 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS