设为首页 收藏本站
查看: 1133|回复: 0

[经验分享] python scrapy版 极客学院爬虫V2

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-30 08:12:17 | 显示全部楼层 |阅读模式
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"]= href
  •             meta["title"]= title
  • yieldRequest(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多条
DSC0000.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145098-1-1.html 上篇帖子: python+stomp+activemq 下篇帖子: Python调用Matlab2014b引擎
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表