python scrapy版 极客学院爬虫V2
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]
# print(" %s %s" % (href, title))meta ={}meta["href"]= hrefmeta["title"]= titleyieldRequest(href, callback=self.get_down_urls, meta={"meta": meta},headers=self.headers,cookies=self.cookies)except: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的更多相关文章
- python极客学院爬虫V1
定向爬取极客学院视频,原本只有年费VIP只能下载,经过分析,只要找个免费体验VIP即可爬取所有视频 涉及的基本技术:python xpath 正则 com+ 通过python调用迅雷从组件,实现自动创 ...
- 基于requests实现极客学院课程爬虫
背景 本文主要是为了完成极客学院课程<Python 单线程爬虫>中讲师布置的实战作业. 开发环境 操作系统:windows 10 Python :Python 2.7 IDE:PyChar ...
- scrapy爬取极客学院全部课程
# -*- coding: utf-8 -*- # scrapy爬取极客学院全部课程 import scrapy from pyquery import PyQuery as pq from jike ...
- maven介绍 极客学院
来自极客学院 Apache Maven 是一套软件工程管理和整合工具.基于工程对象模型(POM)的概念,通过一个中央信息管理模块,Maven 能够管理项目的构建.报告和文档. Maven - 概述 M ...
- 【极客学院出品】Cocos2d-X系列课程之九-BOX2D物理引擎
Cocos2d-x 是时下最热门的手游引擎,在国内和国外手机游戏开发使用的份额各自是70%和25%,在App Store的top10中,有7个是用它开发的. 本节课程为Cocos2d-x系列课程之九, ...
- 【极客学院-idea教程】
极客学院idea教程: http://whudoc.qiniudn.com/2016/IntelliJ-IDEA-Tutorial/index.html
- 极客学院年VIP卡原价260的F码,200出售
F码是中国最大的IT职业在线教育平台——极客学院推出的VIP时间兑换码,凭此可在极客学院官网兑换年VIP,畅享平台上所有IT技术课程. 购买请点击 http://www.bejson.com/othe ...
- 极客学院免费VIP
[手快福利]用我的链接注册极客学院,你我都能免费得30天VIP!6500+编程开发视频教程随便学,还能下载资料和源码 http://e.jikexueyuan.com/invite/index.htm ...
- Ubuntu linux下部署golang配置环境,极客学院 无闻讲的安装配置是错的,折腾我好几遍,真是有点坑
开始按极客学院无闻讲的做,弄了几遍都不行,最后发现是错的,别人告诉我这是mac下的virtualbox是这样的,不管怎样,被坑的不浅. 虽然sudo apt install golang-go 就能安 ...
随机推荐
- Samba Server 配置
1.Issue:Server requested plaintext password but 'client plaintext auth' is disabled session setup ...
- Js 风骚的代码
1.写自动调用的匿名函数 当我们写完一个函数立即调用时,总是 function a(){ } a(); 或许 var a = function(){ } a(); 而高手总是 (function(){ ...
- mongoDB简介
概述 MongoDB 是一款跨平台.面向文档的数据库.用它创建的数据库可以实现高性能.高可用性,并且能够轻松扩展.MongoDB 的运行方式主要基于两个概念:集合(collection)与文档(doc ...
- Spring4学习笔记 - SpEL表达式
- jQuery超酷下拉插件6种效果演示
原始的下拉框很丑啦, 给大家一款jQuery超酷下拉插件6种效果 效果预览 下载地址 实例代码 <div class="container"> <section ...
- 自动适应iframe右边的高度
在开发项目过程中,用iframe嵌套,会发现一个问题,用iframe嵌套的html结构右边不会自动适应高度. 这时候找到了一个解决方法: <iframe name="my_iframe ...
- Delphi 时间耗时统计
处理事情: 数据处理过程中,速度很慢,无法准确定位分析是DB问题还是客户端处理问题,所以增加计时统计日志: Delphi计时首次使用,查阅资料,予以记录: var BgPoint, EdPoind: ...
- CSS基础知识之文本属性二三事
line-height 可以给某个元素指定一个不带单位的缩放因子,这样它的后代元素就会继承这个缩放因子,再根据自身的字号大小来计算自己的行高(line-height)值, body { font-si ...
- 深入源码分析使用jQuery连续发起jsonp请求失败的原因
jQuery的 jsonp 大家应该是十分熟悉了.曾遇到过这样的需求1.希望请求几个相似的内容添加到页面2.请求的内容一定时间内是固定不变的,希望做个缓存. 于是脑子一拍写下了类似这样的代码 for( ...
- 充分利用 SQL Server Reporting Services 图表
最近在查SSRS的一些文章,看到MSDN在有一篇不错的文章,许多图表设置都有说明,共享给大家.. 其中有说明在SSRS中如果去写条件表达写和报表属性中的“自定义代码”,文章相对比较长,需要大家耐心的查 ...