`

pyspider 爬豆瓣电影信息

阅读更多
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2015-11-23 10:50:38
# Project: doubanmovie
from pyspider.libs.base_handler import *
import pymongo,sys
from pymongo import MongoClient
import re,time,random,hashlib
from scrapy.selector import Selector
from datetime import *
class Handler(BaseHandler):

    client = MongoClient(host="localhost",port=27017, read_preference=pymongo.read_preferences.ReadPreference.PRIMARY_PREFERRED)
    db = client.edogdata
    db.authenticate("database","passwd")

    @every(minutes=24*60)
    def on_start(self):
        self.crawl('http://movie.douban.com/tag/', callback=self.index_page)  #豆瓣电影标签

    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        for each in response.doc('a[href^="http"]').items():
            if re.match("http://www.douban.com/tag/\w+", each.attr.href, re.U):   #  爱情,戏剧,刘德华,1990,惊悚,恐怖 。。。
                self.crawl(each.attr.href, callback=self.list_page)
               
    @config(age=2, priority=2)
    def list_page(self, response):
        #print "urlllll response",response.doc
        movie =  response.doc('a[href^="http"]').items()
        for each in movie:
            if re.match("http://www.douban.com/link2/\W+",each.attr.href):
                #print "each",each.text()
                #print "each.attr.href",each.attr.href
                if each.attr.href.find("movie") < 130:
                    self.crawl(each.attr.href, callback=self.final_page)
                    print "find movie"

    def final_page(self,response):
        for each in response.doc('a[href^="http"]').items():
            if re.match('http://movie.douban.com/\w+',each.attr.href,re.U):
                self.crawl(each.attr.href,callback=self.detail_page)
            #翻页
        self.crawl([x.attr.href for x in response.doc('.next a').items()],callback=self.final_page) # .next 的 '.' 表示class=next  ,如果是 #next 的话,则表示 id=next ×××××××××××××××××××××××××××××××××××××××××××××××××××
    #@config(priority=4)
    def detail_page(self, response):
        now = str(datetime.now())
        _id = hashlib.md5(response.doc('HTML>BODY>DIV#wrapper>DIV#content>H1>SPAN').text().encode('utf-8')).hexdigest()
        site = response.url
        name = response.doc("title").text().split('(')[0]#response.doc('HTML>BODY>DIV#wrapper>DIV#content>H1>SPAN[property="v:itemreviewed"]').text()
        director = [x.text() for x in response.doc('a[rel="v:directedBy"]').items()]
        release_date = [x.text() for x in response.doc('span[property="v:initialReleaseDate"]').items()]
        actor = '/'.join([x.text() for x in response.doc('a[rel="v:starring"]').items()])
        rating = [x.text() for x in response.doc('strong[property="v:average"]').items()]
        type = [x.text() for x in response.doc('span[property="v:genre"]').items()]
        source = '豆瓣'
        #IMDb_Link =  [x.attr.href for x in response.doc('a[rel="nofollow"]').items()]  
        IMDb_Link =  response.doc('HTML>BODY>DIV#wrapper>DIV#content>DIV.grid-16-8.clearfix>DIV.article>DIV.indent.clearfix>DIV.subjectwrap.clearfix>DIV.subject.clearfix>DIV#info>a[rel="nofollow"]').attr.href # HTML>BODY 可以不用
        self.db.douban.insert({"_id":_id,"url":site , "title":name,"time":now,"director":director,"release_date": release_date,'actor':actor,"type": type,"source": source,"rating":rating,"IMDb_Link":IMDb_Link})
        return {
            "url": response.url,
            "title": name,#response.doc('HTML>BODY>DIV#wrapper>DIV#content>H1>SPAN[property="v:itemreviewed"]').text(),#property="v:itemreviewed
            "rating": rating,#response.doc('HTML>BODY>DIV#wrapper>DIV#content>DIV.grid-16-8.clearfix>DIV.article>DIV.indent.clearfix>DIV.subjectwrap.clearfix>DIV#interest_sectl>DIV.rating_wrap.clearbox>DIV.rating_self.clearfix>STRONG.ll.rating_num').text(),
            "导演": actor,#[x.text() for x in response.doc('a[rel="v:directedBy"]').items()],
            "time": now,
            "release_date" : release_date,
            "actor" : actor,
            "type" : type,
            "IMDb_Link" : IMDb_Link
        }
1
1
分享到:
评论

相关推荐

    使用python的pyspider爬虫进行开发

    pyspider提供了Web界面,可以查看任务状态、日志信息,以及实时调试爬虫代码。通过Web界面,开发者可以轻松管理和调整爬虫项目。 最后,为了保证爬虫的稳定性和效率,我们需要合理设置Scheduler的调度策略,例如...

    豆瓣电影爬虫案例

    该项目主要介绍了一种通过爬虫技术抓取豆瓣电影网站上科幻电影前34名的数据,并保存这些电影的详细信息及剧照的方法。 #### 二、环境搭建与依赖库安装 在开始编写代码之前,需要确保已安装Python环境。此外,还...

    知乎爬虫和v2ex爬虫的实现。使用python的pyspider爬虫进行开发、

    总的来说,通过pyspider开发的知乎和V2EX爬虫,可以帮助我们获取这些社区中的宝贵信息,为各种数据分析和应用开发提供数据支持。同时,要始终牢记合法、合规、尊重网络伦理,合理地进行数据采集。

    使用Pyspider框架的豆瓣爬虫.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    python网络爬虫pyspider.75

    Python网络爬虫是数据获取和信息挖掘的重要工具,而Pyspider则是一个强大的Python爬虫框架,专为处理复杂的Web应用而设计。本话题将深入探讨Pyspider的相关知识点,包括其基本概念、核心组件、工作流程、配置文件...

    pyspider——pyspider下载

    2. **信息监控**:实时监测网站动态,例如价格监控、新闻监控等。 3. **搜索引擎索引**:构建小型的本地搜索引擎。 4. **社交媒体分析**:抓取社交媒体上的公开数据,进行情感分析或其他社会科学研究。 **六、...

    pycurl+pyspider+phabtomjs

    在IT行业中,网络爬虫是数据获取的重要工具,而`pycurl`、`pyspider`和`PhantomJS`都是在这个领域中扮演关键角色的库或工具。接下来,我们将详细探讨这三个组件以及它们如何协同工作。 1. **pycurl**: `pycurl`是...

    pyspider.rar 网页爬虫 网页抓取

    **网页爬虫与Pyspider详解** 网页爬虫,又称网络爬虫或数据抓取器,是一种自动遍历互联网并获取网页信息的程序。它能够帮助我们批量收集、整理和分析网页上的数据,广泛应用于搜索引擎优化、市场研究、数据分析等...

    pyspider中文手册

    ### PySpider中文手册知识点概述 #### 一、PySpider简介 - **定义**: PySpider是一个简单易用且功能强大的Python爬虫框架。它提供了一种高效的方法来抓取网络数据,并支持通过图形用户界面(Web UI)进行调试,极...

    【python爬虫】资源pyspider-v0.3.10

    - 使用`pyspider.libs.response`处理响应对象,获取HTTP头、状态码等信息。 - 利用`pyspider.libs.utils.run_in_thread`实现异步处理,提高性能。 - 结合Scrapy、Selenium等其他工具,处理更复杂的爬虫场景。 - 实现...

    Python-PySpider一个国人编写的强大的网络爬虫系统并带有强大的WebUI

    任务监视器则可以帮助开发者了解爬虫的运行状态,包括抓取进度、错误信息等;项目管理器则对整个爬虫项目进行了有序的组织,便于管理和维护。 文件“binux-pyspider-c350f62”很可能是指PySpider的一个特定版本,这...

    pyspider打包环境

    【pyspider打包环境】是一个专门为Python爬虫框架pyspider准备的运行环境,它包括了必要的软件和库,确保在Windows操作系统上能够顺利运行pyspider项目。这个环境包含了以下四个关键组件: 1. **Python 2.7.12**: ...

    python3.7安装pyspider修复文件

    1. 检查所有报错信息,找出不兼容的模块或函数。 2. 更新Pyspider及其依赖库到最新版本,确保它们支持Python3.7。 3. 查阅官方文档或社区论坛,寻找已知的Python3.7兼容性问题和解决方案。 4. 如果需要,修改源代码...

    Python爬虫的学习历程-PySpider.zip

    Python爬虫的学习历程是一个充满挑战和乐趣的过程,PySpider是一个强大的、开源的Web爬虫框架,专为Python爱好者设计。本文将深入探讨PySpider的基本概念、安装步骤、核心组件以及如何构建一个简单的爬虫项目。 ...

    爬取豆瓣电影Top250+爬取知乎专栏文章标题

    3. 爬虫的技术栈常见的爬虫技术栈包括:- 编程语言:Python- 网络库:requests、urllib- 解析库:BeautifulSoup、lxml、re- 数据库:MySQL、MongoDB- 框架:Scrapy、PySpider4. 爬虫的对象爬虫对象主要包括以下几个...

    PySpider基础入门+网络爬虫原理与技术+Python环境搭建与配置+PySpider框架解析+数据抓取与解析技术全套教程

    PySpider基础入门 网络爬虫原理与技术 Python环境搭建与配置 PySpider框架解析 数据抓取与解析技术 正则表达式与BeautifulSoup使用 XPath与PyQuery详解 ...PySpider实战:电商网站商品信息爬取 网络爬虫法律与伦理

    Python3网络爬虫基础+实战案例 Scrapy、Flask、PySpider、Tushare

    Requests+正则表达式爬取猫眼电影 分析Ajax请求并抓取今日头条街拍美图 使用Selenium模拟浏览器抓取淘宝商品美食信息 使用Redis+Flask维护动态代理池 使用代理处理反爬抓取微信文章 使用Redis+Flask维护动态Cookies...

    Python3爬虫中pyspider的安装步骤

    如果一切顺利,控制台将显示服务启动的信息,同时pyspider的Web服务将在本地的5000端口运行。在浏览器中访问http://localhost:5000/,若能看到pyspider的WebUI管理页面,说明安装已成功。 pyspider的WebUI界面直观...

    下载pyspider报错时所需的pycurl文件

    在Python的Web爬虫开发中,`pyspider`是一个功能强大的分布式爬虫框架,它提供了从数据抓取到数据分析的一整套解决方案。然而,有时候在安装或使用`pyspider`的过程中,可能会遇到一些依赖问题,比如标题中提到的`...

    pyspider乱码替换包

    【pyspider乱码替换包】是一个针对Python爬虫框架pyspider处理编码问题的解决方案。在网页抓取过程中,由于不同网站的字符编码不一致,有时会导致乱码问题,这个包就是为了帮助开发者有效地解决这类问题。下面将详细...

Global site tag (gtag.js) - Google Analytics