【python--爬虫】斗图啦表情包爬虫

前言

你还在,你还在,头悬梁锥刺股。

下,下,下,表情包吗?

你还以为盗个图战胜小学生。

就能成为斗图王吗?

你还把会做图当成斗图资本吗?

你还为斗不过图而痛哭流泪吗?

No no no no no

No no no no no no no

人生苦短

Q群数十小学生变身斗图王的梦想

你可以复制

是时候写个爬虫了

前提准备

本次教程将为您讲解如何爬取斗图啦网的表情包,网址链接:http://www.doutula.com

为完美食用本次教程,需要亲先提前准备好以下编程环境:

python3【博主使用的是3.7】

requests库【版本无要求】

lxml库【需要含有etree模块的才行,博主使用的是4.3.3】

火狐浏览器【这个不一定,看个人习惯】

网页分析

打开斗图啦首页【http://www.doutula.com】。

我们可以看到有许多的表情包,但是我们不是每次都会发全部类型的表情包。

通常采取的是发送符合某个主题或关键字的表情包,所以我们就需要搜索功能。

在红框处的搜索框中输入【女装大佬】,尝试搜索以女装大佬为关键字的表情包,看看网址有何变化。

搜索之后将会打开如下链接【http://www.doutula.com/search?keyword=女装大佬 】,页面内容如下:

我们可以发现url中【keyword】的参数就是我们搜索的关键字【女装大佬】

我们可以大胆的猜测下通过修改【keyword】的值就可以得到对应关键字的表情包的搜索页。

尝试一:

修改【keyword】的值为【金馆长】,看看能否打开金馆长的搜索页面。修改后的网址为:

【http://www.doutula.com/search?keyword=金馆长】

看着页面上桀骜不羁的笑脸,就知道我们打开了金馆长表情包的搜索页

我们再做一次尝试验证我们的想法。

尝试二:

修改【keyword】的值为【你好骚啊】,看看能否打开【品如的衣柜】。修改后的网址为:

http://www.doutula.com/search?keyword=你好骚啊

述看着这样欲笑又止的侧脸,我知道我成功的打开了品如的衣柜(。・∀・)ノ

看到这证明我们猜想是对的,搜索页是通过url中【keyword】的值控制的

我们回到【女装大佬】的搜索页,链接地址:【http://www.doutula.com/search?keyword=女装大佬 】,看看如何获取图片的url。

我们再图中红框处的国民扳手的图片上【右键】选择【查看元素】,提取处图片的url地址

【http://img.doutula.com/production/uploads/image/2019/03/28/20190328703619_OEuNCP.jpg】

我们在打开这个网址,看看对应的是不是国服扳手的表情包

没错,就是那张图片,现在回到【女装大佬】搜索页

按【ctrl】+【u】打开页面源代码

按【ctrl】+【f】打开快速搜索框

在搜索框中粘贴上我们前面获取的图url,查看在url处于源码里哪个标签中。

图片url:【http://img.doutula.com/production/uploads/image/2019/03/28/20190328703619_OEuNCP.jpg】

可以看到处于含有class属性值为【“img-responsive lazy image_dtb”】的img标签中的【data-backup】属性里

最后我们在总结下:

1.通过修改url【http://www.doutula.com/search?keyword=】中【keyword】的值可以打开不同内容的搜索页

2.图片url在网页源码中含有class属性值为【“img-responsive lazy image_dtb”】的img标签中的【data-backup】属性里

现在我们有了思路可以开始写代码了。

代码拆解

    我们创建一个名为名为【斗图啦爬虫.py】的Python程序文件,并在当前目录中创建一个名为【img】的文件夹作为后期的图片保存使用

2. 接下来就是老生常谈的设置程序信息和导入模块了

----------------------------------------------------------------------------------------------------------------

# -*- coding:utf-8 -*-

#作者:猫先生的早茶

#时间:2019年8月23日

from lxml import etree

import requests

    ----------------------------------------------------------------------------------------------------------------

第一行# -*- coding:utf-8 -*-代表设置程序运行时使用的默认编码为utf-8

第二行和第三行分别时记录作者和创作时间

第四行from lxml import etree 从lxml库中导入etree模块,用于后期从网页代码中提取内容

第五行import requests导入requests模块,用于从网站获取资源

3.创建类与函数

----------------------------------------------------------------------------------------------------------------

class DouTuLa():

    def __init__(self,key):

        """参数设置"""

        self.key = key


    def main(self):

        """控制程序运行"""

        pass

doutula = DouTuLa('女装大佬')

doutula.main()

----------------------------------------------------------------------------------------------------------------

第一行class DouTuLa():我们设置了一个名为DouTuLa的函数

第二至四行我们设置使用这个函数时需要传出一个key关键字,并且将关键字的内容保存到变量self.key中,key关键字用于存储我们要搜索的关键字

第六行至第八行我们设置了一个名为main的函数用于控制程序运行

第九行至第十行我们给类DouTuLa创建了一个doutula实例,并传入了参数【女装大佬】作为表情包搜索参数

4.在__init__函数中添加一些程序中后面要使用的变量

----------------------------------------------------------------------------------------------------------------

    def __init__(self,key):

        """参数设置"""

        #设置搜索的表情包关键字

        self.key = key

        #生成表情包搜索页面url

        self.url = "http://www.doutula.com/search?keyword={}".format(key)

        #设置网页请求头

        self.headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0'}

    ----------------------------------------------------------------------------------------------------------------

5.网页下载函数

----------------------------------------------------------------------------------------------------------------

    def get_html(self,url):

        """下载网页"""

        return requests.get(url,headers=self.headers).text

----------------------------------------------------------------------------------------------------------------

我们定义了一个get_html函数,函数使用时需要传入url作为下载的网页网址。

将下载到的网页作为返回值弹出。

6.图片下载函数

我们定义一个图片下载函数,用于下载并保存图片

----------------------------------------------------------------------------------------------------------------

    def get_img(self,url):

        """下载用户指定的图片"""

        img = requests.get(url,headers=self.headers).content

        file = 'img\\{}'.format(self.key)+url.split('/')[-1]

        with open (file,'wb') as save_img:

            save_img.write(img)
----------------------------------------------------------------------------------------------------------------

第一行我们定义了一个名为get_img的函数用于下载保存图片,调用时需要传入图片的url

第三行我们使用requests下载图片并保存到img变量中

第四行我们设置了文件名

第五行至第六行我们将图片保存

7.主函数

----------------------------------------------------------------------------------------------------------------

    def main(self):

        """控制程序运行"""

        #下载网页

        html=self.get_html(self.url)

        #将网页转换为etree格式

        html_etree = etree.HTML(html)

        #提取图片url

        img_urls = html_etree.xpath('//img[@class="img-responsive lazy image_dtb"]/@data-backup')

        #循环提取处图片url

        for img_url in img_urls:

            self.get_img(img_url)

  ----------------------------------------------------------------------------------------------------------------

第四行我们先下载网页

第六行我们将网页转化为etree格式

第八行我们从网页中匹配处图片url

第十行至第十一行我们循环提取出图片url并下载保存

8.效果展示

在这里插入图片描述

完整代码

 ----------------------------------------------------------------------------------------------------------------

# -*- coding:utf-8 -*-

#作者:猫先生的早茶

#时间:2019年8月23日

from lxml import etree

import requests

class DouTuLa():

    def __init__(self,key):

        """参数设置"""

        #设置搜索的表情包关键字

        self.key = key

        #生成表情包搜索页面url

        self.url = "http://www.doutula.com/search?keyword={}".format(key)

        #设置网页请求头

        self.headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0'}

    def get_html(self,url):

        """下载网页"""

        return requests.get(url,headers=self.headers).text

    def get_img(self,url):

        """下载用户指定的图片"""

        img = requests.get(url,headers=self.headers).content

        file = 'img\\{}'.format(self.key)+url.split('/')[-1]

        with open (file,'wb') as save_img:

            save_img.write(img)



    def main(self):

        """控制程序运行"""

        #下载网页

        html=self.get_html(self.url)

        #将网页转换为etree格式

        html_etree = etree.HTML(html)

        #提取图片url

        img_urls = html_etree.xpath('//img[@class="img-responsive lazy image_dtb"]/@data-backup')

        #循环提取处图片url

        for img_url in img_urls:

            self.get_img(img_url)


doutula = DouTuLa('女装大佬')

doutula.main()

  ----------------------------------------------------------------------------------------------------------------

原文链接:https://blog.csdn.net/qq_43017750/article/details/100038668

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

推荐阅读更多精彩内容

  • 声明:本文讲解的实战内容,均仅用于学习交流,请勿用于任何商业用途! 一、前言 强烈建议:请在电脑的陪同下,阅读本文...
    Bruce_Szh阅读 12,672评论 6 28
  • 文 | 文翼 本文为【爱惠物语】原创首发 转载请联系后台授权 抄袭必究 听说音乐和文章更配哦 所有的动力都来自...
    大文小翼阅读 267评论 0 1
  • 在这风和日丽的“最后一天”,我坐在教室里写着毫无头绪的总结,本学期的最后一天都在复习,我都闲到靠睡觉度日了,睡到...
    大碗__阅读 240评论 0 0
  • 想住在一家奶茶铺附近 在有一间充满阳光的屋子里画画,从早到晚
    西班牙没有三棵树阅读 121评论 0 0
  • 现在自媒体这么火,那么有什么自媒体比较简单的赚钱方式呢?今天小编整理了3个比较简单的赚钱方式,新手小白大咖都适用。...
    乐观助手阅读 204评论 0 0