python scrapy版 极客学院爬虫V2

1 基本技术 使用scrapy

2 这个爬虫的难点是 Request中的headers和cookies 尝试过好多次才成功(模拟登录),否则只能抓免费课程

3文件树如下

│ jike.json 存储json文件
│ run.py 运行爬虫
└─jkscrapy
│ items.py 设置字段
│ pipelines.py 处理字段
│ settings.py 基本设置
init.py
└─spiders
jkspiders.py 爬虫
jkspiders.pyc
init.py

coding:utf-8

from jkscrapy.items import JkscrapyItem
from scrapy.http import Request
import re
from scrapy.spiders import BaseSpider
from scrapy.selector import Selector
from jkscrapy.settings import *
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

爬虫

class jikespider(BaseSpider):
name = "jike"
baseurl = "http://www.jikexueyuan.com/course/"
starturls = ["http://www.jikexueyuan.com/"]
allowed_domains = ["www.jikexueyuan.com", "search.jikexueyuan.com", "jikexueyuan.com"]
def __init
(self):
self.headers = headers
self.cookies = cookies
pass

爬虫 重写 BaseSpider parse

-1、在首页中获取标签及课程对应的地址
-2、eghttp://www.jikexueyuan.com/course/python/
def parse(self, response):
s_total = Selector(text=response.body).xpath(
'//*[@id="pager"]/div[1]/div[1]/ul/li/div/div/div/dl/dd/a/@href').extract()
if len(s_total) > 0:
for page in s_total:
yield Request(page, callback=self.get_course_pages,headers=self.headers,cookies=self.cookies)
else:
pass

爬虫 get_course_pages 获取课程连接

-1、scrapy Selector xpath 获取课程地址
-2、eg http://www.jikexueyuan.com/course/1860.html
def get_course_pages(self, response):
x_couses = Selector(text=response.body).xpath('//*[@id="changeid"]/ul/li/div[1]/a')
for x in x_couses:
try:
href = x.select('@href').extract()[0]
title = x.select('img/@title').extract()[0]
yield Request(href, callback=self.get_course_detail,headers=self.headers,cookies=self.cookies)
except:
pass

爬虫 get_course_detail获取课程

-1、scrapy Selector xpath 获取课程地址
-2、eg http://www.jikexueyuan.com/course/271_3.html?ss=1
def get_course_detail(self, response):
d_couses = Selector(text=response.body).xpath('//*[@id="pager"]/div[3]/div[2]/div[2]/ul/li/div/h2/a')
for d in d_couses:
try:
href = d.select('@href').extract()[0]
print(href)
title = d.select('text()').extract()[0]

  1. # print(" %s %s" % (href, title))
  2. meta ={}
  3. meta["href"]= href
  4. meta["title"]= title
  5. yieldRequest(href, callback=self.get_down_urls, meta={"meta": meta},headers=self.headers,cookies=self.cookies)
  6. except:
  7. pass

爬虫 get_down_urls获取课程下地址

-1、正则 获取课程下载地址,这个是调用flash播放地址 尝试过很多方法 最后发现正则可以
-2、eg http://cv3.jikexueyuan.com/201509071527/df51514a02286dac0b30245eaa4dd166/html5/course_mob/01/video/c271b_03_h264_sd_960_540.mp4
def get_down_urls(self, response):
meta = response.meta["meta"]
course_down = re.findall(r'source src="(.*?)"', response.body, re.S)
item = JkscrapyItem()
if course_down:
item["course_id"] = meta["href"]
item["course_name"] = meta["title"]
item["course_path"] = course_down[0]
yield item

爬虫为了测试简要的存储为json 结果只存储了几个字段,可以根据需要进行调整共爬取了4500多条

python scrapy版 极客学院爬虫V2的更多相关文章

  1. python极客学院爬虫V1

    定向爬取极客学院视频,原本只有年费VIP只能下载,经过分析,只要找个免费体验VIP即可爬取所有视频 涉及的基本技术:python xpath 正则 com+ 通过python调用迅雷从组件,实现自动创 ...

  2. 基于requests实现极客学院课程爬虫

    背景 本文主要是为了完成极客学院课程<Python 单线程爬虫>中讲师布置的实战作业. 开发环境 操作系统:windows 10 Python :Python 2.7 IDE:PyChar ...

  3. scrapy爬取极客学院全部课程

    # -*- coding: utf-8 -*- # scrapy爬取极客学院全部课程 import scrapy from pyquery import PyQuery as pq from jike ...

  4. maven介绍 极客学院

    来自极客学院 Apache Maven 是一套软件工程管理和整合工具.基于工程对象模型(POM)的概念,通过一个中央信息管理模块,Maven 能够管理项目的构建.报告和文档. Maven - 概述 M ...

  5. 【极客学院出品】Cocos2d-X系列课程之九-BOX2D物理引擎

    Cocos2d-x 是时下最热门的手游引擎,在国内和国外手机游戏开发使用的份额各自是70%和25%,在App Store的top10中,有7个是用它开发的. 本节课程为Cocos2d-x系列课程之九, ...

  6. 【极客学院-idea教程】

    极客学院idea教程: http://whudoc.qiniudn.com/2016/IntelliJ-IDEA-Tutorial/index.html

  7. 极客学院年VIP卡原价260的F码,200出售

    F码是中国最大的IT职业在线教育平台——极客学院推出的VIP时间兑换码,凭此可在极客学院官网兑换年VIP,畅享平台上所有IT技术课程. 购买请点击 http://www.bejson.com/othe ...

  8. 极客学院免费VIP

    [手快福利]用我的链接注册极客学院,你我都能免费得30天VIP!6500+编程开发视频教程随便学,还能下载资料和源码 http://e.jikexueyuan.com/invite/index.htm ...

  9. Ubuntu linux下部署golang配置环境,极客学院 无闻讲的安装配置是错的,折腾我好几遍,真是有点坑

    开始按极客学院无闻讲的做,弄了几遍都不行,最后发现是错的,别人告诉我这是mac下的virtualbox是这样的,不管怎样,被坑的不浅. 虽然sudo apt install golang-go 就能安 ...

随机推荐

  1. Echars详解

    简介 ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9 /1 ...

  2. 2015暑假多校联合---Mahjong tree(树上DP 、深搜)

    题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5379 Problem Description Little sun is an artis ...

  3. Visual C++中的一些编程小技巧

    在应用程序的任意地方实现窗体的最大化.最小化.正常窗口等功能 // 设置Windows窗体的状态void CMinWindowsDlg::SetWindowState(int nWindowSize) ...

  4. java顺序表和树的实现

    一.顺序表 1.线性表 //java顺序表的实现,如ArrayList就是用线性表实现的,优点是查找快,缺点是添加或删除要移动很多元素,速度慢 public class SequenceList { ...

  5. Droid@screen:在PC屏幕上显示Android手机屏幕

    这里介绍一款工具——Droid@screen,用来获取手机屏幕,显示在PC屏幕上.它集截图.录像等多种功能于一体. 安装 1.    下载地址:http://droid-at-screen.org/d ...

  6. Materialize - 响应式 Material Design 框架

    由谷歌创建和设计的 Material Design(材料设计)是一种设计语言,结合成功的设计的经典原则以及创新科技.谷歌的目标是开发一个设计系统,让所有的产品在任何平台上拥有统一的用户体验. Mate ...

  7. document.querySelector和querySelectorAll方法

    querySelector和querySelectorAll是W3C提供的新的查询接口,其主要特点如下: 1.querySelector只返回匹配的第一个元素,如果没有匹配项,返回null.  2.q ...

  8. HTML5攻防向量

    From:HTML 5 Morden Day Attack And Defense Vectors Autor:Rafay Baloch 摘要 根据Powermapper出版的统计,他们分析的Web页 ...

  9. SharePoint 2013 为站点配置基于主机标头的双域名

    SharePoint的应用中,经常需要配置双域名,为不同的认证方式提供访问入口,下面简单介绍下,如何以主机标头的方式为SharePoint配置双域名: 配置基于主机标头的双域名 1.原本可以访问的测试 ...

  10. Excel里生成GUID

    Private Declare Function CoCreateGuid Lib "ole32" (id As Any) As Long    Private Function ...