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编程时利用wxPython来支持多线程的方法
Apr 07 Python
玩转python爬虫之爬取糗事百科段子
Feb 17 Python
Python max内置函数详细介绍
Nov 17 Python
Python对象类型及其运算方法(详解)
Jul 05 Python
python3 模拟登录v2ex实例讲解
Jul 13 Python
Python 12306抢火车票脚本
Feb 07 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
May 24 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
python3图片文件批量重命名处理
Oct 31 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
python实现超级玛丽游戏
Mar 18 Python
如何在sublime编辑器中安装python
May 20 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/04/28 PHP
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
php经典趣味算法实例代码
2020/01/21 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
2011/05/24 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
实现python版本的按任意键继续/退出
2016/09/26 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
英国工具中心:UK Tool Centre
2017/07/10 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
个人委托书范本
2014/04/02 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
就业协议书
2014/09/12 职场文书
SQL优化老出错,那是你没弄明白MySQL解释计划用法
2021/11/27 MySQL
JS实现简单的九宫格抽奖
2022/06/28 Javascript