使用pyspider爬取巨量淘宝MM图片

简介: 版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.csdn.net/Jailman/article/details/79354568

具体搭建步骤不再赘述,这里主要使用到了fakeagent,phantomjs和proxy
pyspider的爬取相当智能,在不能获取图片的时候会适当的暂停一段时间再试探性的爬取,配合fakeagent,proxypool和phantomjs,爬取成功率在90%以上。
代码是扒的别人的然后修改提高速度和成功率的,数据总量在百G左右,磁盘大的可以扒一扒。

代码如下:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2016-03-25 00:59:45
# Project: taobaomm

from pyspider.libs.base_handler import *
from fake_useragent import UserAgent
import base64
import requests
import random
import sys
reload(sys)
sys.setdefaultencoding('UTF-8') 


PAGE_START = 1
PAGE_END = 4301
DIR_PATH = '/root/images/tbmm'


class Handler(BaseHandler):

    r = requests.get(u'http://127.0.0.1:5010/get_all/')
    proxy = random.choice(eval(r.text))
    ua = UserAgent()

    crawl_config = {
        "proxy": proxy,
        "headers":{
            "User-Agent": ua.random
        },
    }

    def __init__(self):
        self.base_url = 'https://mm.taobao.com/json/request_top_list.htm?page='
        self.page_num = PAGE_START
        self.total_num = PAGE_END
        self.deal = Deal()

    def on_start(self):
        while self.page_num <= self.total_num:
            url = self.base_url + str(self.page_num)
            self.crawl(url, callback=self.index_page)
            self.page_num += 1

    def index_page(self, response):
        for each in response.doc('.lady-name').items():
            self.crawl(each.attr.href, callback=self.detail_page, fetch_type='js')

    def detail_page(self, response):
        domain = response.doc('.mm-p-domain-info li > span').text()
        if domain:
            page_url = 'https:' + domain
            self.crawl(page_url, callback=self.domain_page)

    def domain_page(self, response):
        name = base64.b64encode(response.doc('.mm-p-model-info-left-top dd > a').text())
        dir_path = self.deal.mkDir(name)
        brief = response.doc('.mm-aixiu-content').text()
        if dir_path:
            imgs = response.doc('.mm-aixiu-content img').items()
            count = 1
            self.deal.saveBrief(brief, dir_path, name)
            for img in imgs:
                url = img.attr.src
                if url:
                    extension = self.deal.getExtension(url)
                    file_name = name + str(count) + '.' + extension
                    count += 1
                    self.crawl(img.attr.src, callback=self.save_img,
                               save={'dir_path': dir_path, 'file_name': file_name})

    def save_img(self, response):
        content = response.content
        dir_path = response.save['dir_path']
        file_name = response.save['file_name']
        file_path = dir_path + '/' + file_name
        self.deal.saveImg(content, file_path)


import os

class Deal:
    def __init__(self):
        self.path = DIR_PATH
        if not self.path.endswith('/'):
            self.path = self.path + '/'
        if not os.path.exists(self.path):
            os.makedirs(self.path)

    def mkDir(self, path):
        path = path.strip()
        dir_path = self.path + path
        exists = os.path.exists(dir_path)
        if not exists:
            os.makedirs(dir_path)
            return dir_path
        else:
            return dir_path

    def saveImg(self, content, path):
        f = open(path, 'wb')
        f.write(content)
        f.close()

    def saveBrief(self, content, dir_path, name):
        file_name = dir_path + "/" + name + ".txt"
        f = open(file_name, "w+")
        f.write(content.encode('utf-8'))

    def getExtension(self, url):
        extension = url.split('.')[-1]
        return extension
目录
相关文章
|
存储 数据采集 调度
3. 爬虫框架Clawler 爬取优酷电影名
之前我们都是使用HtmlAgilityPack类库来进行页面的爬取,今天我们使用一个爬虫框架。 框架名称:Clawler 参考地址 框架设计 由于我是参考的webmagic,所以整体架构上没有什么大的变化,设计图如下(图片是直接从webmagic上拿的...
1220 0
|
数据可视化
手把手教你爬取淘宝的笔记本电脑数据(三)
手把手教你爬取淘宝的笔记本电脑数据(三)
手把手教你爬取淘宝的笔记本电脑数据(三)
|
数据采集 测试技术
手把手教你爬取淘宝的笔记本电脑数据(二)
手把手教你爬取淘宝的笔记本电脑数据(二)
手把手教你爬取淘宝的笔记本电脑数据(二)
|
Web App开发 Python
手把手教你爬取淘宝的笔记本电脑数据(一)
手把手教你爬取淘宝的笔记本电脑数据(一)
手把手教你爬取淘宝的笔记本电脑数据(一)
|
Web App开发 数据采集 Python
Python爬虫,抓取淘宝商品评论内容!
作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”做为参考目标吧~!如果想抓其他商...
1750 0
|
数据采集 JavaScript 前端开发
Java爬虫——网易云热评爬取
爬取目标网址 :   http://music.163.com/#/song?id=409649818 需要爬取信息 :   网易云top13热评   使用之前的 HttpURLConnection 获取网页源码,经过分析发现,在源码中并没有热评信息 1 package bok; 2 3 import java.
2730 0
|
JavaScript 大数据 应用服务中间件
Python网络爬虫(JSON, Phantomjs, selenium/Chromedirver,豆瓣电影、斗鱼直播、京东商城爬取)
python、python爬虫、网络爬虫、爬虫框架、selenium、requests、urllib、数据分析、大数据、爬虫爬取静态网页、爬虫基础、自动化测试、json、动态加载、反爬虫
3548 0
|
数据采集 JSON API
网易云音频数据如何爬取?
网易云音频数据如何爬取?
自动化爬取网易云视频,一个是获取网易云视频列表 一个是 获取视频真实播放地址
自动化爬取网易云视频,一个是获取网易云视频列表 一个是 获取视频真实播放地址

热门文章

最新文章