手把手教你从今日头条爬取你想要的任何图片

都说人生苦短,我用python。为了找点乐趣,不如写个爬虫?

那爬什么呢?

宇宙条是爬虫界行家,它的很多信息都是从其它网站爬来的,那就拿它练练手吧。

网上类似的文章其实不少,但是大多是很久之前的,在这期间头条已经做了改版,因此还必须自己动手。

具体原理不多说了,直接简单介绍下步骤:

1.首先,打开头条首页,搜索关键词「美景」,可以得到搜索结果页面链接为https://www.toutiao.com/search/?keyword=美景​,搜索结果如下:

image

2.同时注意到这是一个Ajax请求,因此我们需要拿到其真实的请求url,就是图中红框标出来的部分。

3.第一次发起搜索请求时,头条有一个滑块验证,这里我们就不模拟这个过程了,手动验证,拿到cookie就好,同时将自己的浏览器信息,请求参数都复制出来:

image

连续向后翻页,发现变化的参数只有offset一个,也就是偏移量。

4.观察请求结果,最关键的是article_url这个字段,根据这个链接重定向,就可以跳转到列表中每篇文章的详情页。

image

5.进入详情页,查看网页源码,可以发现图片链接都是以下图标出来的形式记录的,这就好办了,简单正则匹配一下就好

image

6.拿到图片链接,保存到本地,大功告成。

image

应该说头条相对来说做得比较简单一些,毕竟是新闻类网站,总共差不多100行代码就搞定了,不像淘宝,要爬它的数据就要困难很多。

当然了,除了爬美景,其它照片你想爬啥就怕啥,修改下搜索关键字就好了。第一次写爬虫,还有很多可以优化的地方。简单贴下代码,需要的自取,鬼晓得头条啥时候又改版了,同时欢迎大家review😆。

最后,祝各位大小宝宝节日快乐~~~~

更多技术文章,咱们公众号见,我在公众号里等你~

image.png
# -*- coding: utf-8 -*-
import os
import re
import threading
import time
from hashlib import md5
from urllib import urlencode

import requests

# 这里设置你想查询的关键字
keyword = '美景'
# 这里替换成你自己的浏览器信息
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
# 头条图片搜索需要滑动验证,因此简单处理,先手动验证,然后设置cookie
cookie = 'tt_webid=6696746174420534791; WEATHER_CITY=%E5%8C%97%E4%BA%AC; UM_distinctid=16b0805ea6f31d-02830a8210d05a-37627e03-1fa400-16b0805ea705fd; tt_webid=6696746174420534791; __tasessionId=znvodagrm1559207733945; csrftoken=7201998104473d4e2ad8302bb74ae401; s_v_web_id=600eabfd649cb7a70f3d80b981411bfc; CNZZDATA1259612802=1444442826-1559202415-%7C1559207815'
headers = {
    'Host': 'www.toutiao.com',
    'Referer': 'https://www.toutiao.com/search/?keyword=' + keyword,
    'User-Agent': user_agent,
    'X-Requested-With': 'XMLHttpRequest',
    'Cookie': cookie
}

start_offset = 0
end_offset = 20
step = 20


# 根据偏移量获取每页文章列表
def get_page_by_offset(offset):
    params = {
        'aid': '24',
        'app_name': 'web_search',
        'offset': offset,
        'format': 'json',
        'keyword': keyword,
        'autoload': 'true',
        'count': '20',
        'en_qc': '1',
        'cur_tab': '1',
        'from': 'search_tab',
        'pd': 'synthesis',
    }

    url = 'https://www.toutiao.com/api/search/content/?' + urlencode(params)
    try:
        resp = requests.get(url, headers=headers)
        if resp.status_code == 200:
            return resp.json()
    except requests.ConnectionError:
        return None


# 获取每篇文章的重定向链接
def get_article_url(article):
    if article.get('data'):
        for item in article.get('data'):
            article_url = item.get('article_url')
            title = item.get('title')
            yield {
                'article_url': article_url,
                'title': title
            }


# 将图片保存到文件
def save2file(title, url):
    if not os.path.exists(title):
        os.mkdir(title)
    resp = requests.get(url)
    file_name = './' + title + '/' + md5(resp.content).hexdigest() + '.jpg'
    if not os.path.exists(file_name):
        with open(file_name, 'wb') as f:
            f.write(resp.content)
    else:
        print('Already Downloaded', file_name)


# 获取每篇文章的图片列表
def get_image_by_article(article):
    article_url = article.get('article_url')
    title = article.get('title')
    print title
    print article_url
    if article_url:
        try:
            # 这里需要使用session的方式,否则会因为重定向次数太多而报错
            session = requests.Session()
            session.headers['User-Agent'] = headers['User-Agent']
            resp = session.get(article_url)
            if resp.status_code == 200:
                # soup = BeautifulSoup(resp.text, 'lxml')
                # result = soup.find_all(name='script')[6]
                regex = '.*?img src="(.*?)".*?'
                items = re.findall(regex, resp.text, re.S)
                if items:
                    for item in items:
                        print item
                        save2file(title, item)
        except requests.ConnectionError:
            print 'Get image fail.'


if __name__ == '__main__':
    for offset in range(start_offset, end_offset, step):
        article_list = get_page_by_offset(offset)
        for article in get_article_url(article_list):
            # 每篇文章单独起一个线程进行抓取
            t = threading.Thread(target=get_image_by_article(article))
            t.start()
            t.join()
            # get_image_by_article(article)
    end_time = time.time()
    print('=====Done=====')
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 每天进步一点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点~~从开始只能写几句话、模仿别人的观点,到现...
    一个帅气的名字呀阅读 18,033评论 4 31
  • 这个第5周我很努力的在做好,但总觉得做的不够。 三国,我一直在努力的写。就是有时候,概括不了,不过以后一定会努力的...
    百合花小雨阅读 146评论 0 0
  • 我们努力,我们奋斗,我们筋疲力尽、灰头土脸,机关算尽,不过是为了追寻心中的那片星空,那方大海罢了。 ...
    睡不着的蜗牛阅读 165评论 0 1
  • 现实生活中有很多家长根本不重视好习惯的培养,整天只知道一味追求物质享受,还学会抽烟、喝酒,赌钱,欺骗,不好好地工作...
    好习惯2011阅读 293评论 0 0