Python入门之爬取Tumblr

前言

好久没上了,一是因为忙,二是因为感觉没啥可以写的。刚好这几天放假,闲下来,碰巧前段时间因为需要搞OCR、OpenCV,就开始接触Python,然后今天写点东西,巩固一下。
习惯了C++、Java这种强类型的语言,不太习惯这种若类型的动态语言,感觉很多调用的顺序及方法都要死记硬背的样子,不能像Java一样,看方法名、参数类型、返回类型等自己推敲使用方法。但是写久了也就习惯了。

想法

前两年,因为陆家嘴、优衣库等小视频的原因,导致Tumblr成为大家的焦点,最终导致被和谐。这对我这种小屌丝的打击程度不亚于被LPL又止步S联赛八强。还好,我掌握了爬梯子的技巧,通过梯子,观摩了不少小视频。但是,我发现以前看的小视频慢慢的都变得无法加载等情况,虽然说那些都是撸过的小视频,好马不吃回头草,但是,那是我的青春,怎么能这样忘记他们呢!!!
于是,从网上搜了下别人写好的爬虫,发现只能爬取转载或发表的视频,不能爬取like视频,要知道,我都是不转载,只点like的,那怎么办,那就自己动手写咯。

动手

代码其实不长,而且挺简单的,没有考虑太多,能用就行。废话不说,上代码。

import urllib.request
import urllib.error
import sqlite3
import re


class Tumblr(object):
    def __init__(self, like_url, start_page):
# 设置代理,ss代理
        proxies = {"http": "http://127.0.0.1:1080", "https": "http://127.0.0.1:1080"}
        proxy_handler = urllib.request.ProxyHandler(proxies)
        opener = urllib.request.build_opener(proxy_handler)
        urllib.request.install_opener(opener)
        self.__likes_url = like_url
        self.__page = start_page
        self.__root_dir = 'F:\\Data\\tumblr\\'

    def launch(self):
        while True:
            content = self.__request_likes(self.__page)
            frams = self.__get_frame_url(content)
            for fram in frams:
                target_urls = self.__get_video_url(fram)
                for video_url in target_urls:
                    self.__download_video(video_url)
            self.__page = self.__page + 1

    def __do_request(self, url_):
        req = urllib.request.Request(url_)
        res = urllib.request.urlopen(req)
        return res.read().decode('utf-8')

    def __request_likes(self, page):
        print('Request page = %s' % page)
        target_url = self.__likes_url.format(page)
        return self.__do_request(target_url)

    def __get_frame_url(self, content):
        reg = r"(?<=iframe src=')\S*(?=')"
        pattern = re.compile(reg)
        results = pattern.findall(content)
        print('Find results = %s' % len(results))
        return results

    def __get_video_url(self, url_):
        reg = r'((?<= 如:https://xxx.tumblr.com/likes/page/{}     ,/likes/page/{} 是固定的,不要懂,xxx是你要爬取的
#page => 页面,整形,默认从0开始
#
ins = Tumblr(url, page)
ins.launch()

截图

Python入门之爬取Tumblr_第1张图片
过程
Python入门之爬取Tumblr_第2张图片
打码
Python入门之爬取Tumblr_第3张图片
战果

最后

学语言就是这样,用起来,学的自然快,嘿嘿嘿。。

各位,保重身体

你可能感兴趣的:(Python入门之爬取Tumblr)