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 相关文章推荐
Tensorflow卷积神经网络实例
May 24 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
Python OpenCV处理图像之滤镜和图像运算
Jul 10 Python
django ManyToManyField多对多关系的实例详解
Aug 09 Python
python绘制动态曲线教程
Feb 24 Python
python实现微信打飞机游戏
Mar 24 Python
Python基于QQ邮箱实现SSL发送
Apr 26 Python
Python Serial串口基本操作(收发数据)
Nov 06 Python
Python截图并保存的具体实例
Jan 14 Python
python中pyqtgraph知识点总结
Jan 26 Python
Python实现学生管理系统(面向对象版)
Jun 24 Python
代码复现python目标检测yolo3详解预测
May 06 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去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
2014/08/23 PHP
thinkphp分页集成实例
2017/07/24 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
javascript关于继承解析
2016/05/10 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
vue实现移动端返回顶部
2020/10/12 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
Python实现的桶排序算法示例
2017/11/29 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
parser.add_argument中的action使用
2020/04/20 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
Python同时迭代多个序列的方法
2020/07/28 Python
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
大三在校生电子商务求职信
2013/10/29 职场文书
挑战杯创业计划书的写作指南
2014/01/07 职场文书
蓝颜请假条
2014/04/11 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
500字小学生检讨书
2015/02/19 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
社区法制宣传日活动总结
2015/05/05 职场文书
驳回起诉民事裁定书
2015/05/19 职场文书
2016春节放假通知范文
2015/08/18 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python
Pytest中skip skipif跳过用例详解
2021/06/30 Python
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技