当前位置 : 主页 > 操作系统 > centos >

python爬虫-26-批量爬取表情包,让你斗图再也不会陷入无图可发的窘境

来源:互联网 收集:自由互联 发布时间:2022-06-20
我们现在聊天的时候,总会动不动就开启斗图大会,你有没有陷入无图可发的窘境呢,现在我就带着你解决这个问题。 1、介绍 平台:斗图啦 语言:​​python​​ 技术:​​python​​


python爬虫-26-批量爬取表情包,让你斗图再也不会陷入无图可发的窘境_html

我们现在聊天的时候,总会动不动就开启斗图大会,你有没有陷入无图可发的窘境呢,现在我就带着你解决这个问题。

1、介绍

  • 平台:斗图啦
  • 语言:​​python​​
  • 技术:​​python​​​多线程、​​python​​​安全队列、​​python​​​之​​Xpath​​​、正则、​​request​​

以上我们使用的技术,都是之前整理过的对不对,那么我们就根据之前的学习内容来进行爬取斗图表情包吧。

2、python爬取流程梳理

我们刚开始学习的时候,是不是每次都需要梳理下爬取的流程呢,那么这次咱们还是和之前一样,首先我们需要找到我们爬取的平台的网址是什么:

https://dou.yuanmazg.com/doutu?page=1

访问这个界面之后,我们可以看到如下显示的内容:

python爬虫-26-批量爬取表情包,让你斗图再也不会陷入无图可发的窘境_html_02

然后我们往下滑之后,可以看到这里一共有1500+的页面,那么我们现在爬取前50页的内容吧,大概流程我觉得应该如下哈:

  • 获取每个页面的​​url​​;
  • 将获取到的​​url​​​放置​​Queue​​中;
  • 从​​Queue​​​中获取一个​​Url​​​,使用​​requests​​​获取内容,使用​​xpath​​​获取取该​​Url​​​中每一个图片的​​Url​​;
  • 然后将每个图片中的​​Url​​​放入到另一个​​Queue​​中;
  • 然后再从第二个​​Queue​​​中获取图片的​​url​​;
  • 根据​​Queue​​来下载并保存即可;
  • 以上步骤我们使用多线程+​​Queue​​的形式来进行。
  • 3、python爬取图片

    3.1 框架

    老样子,首先我们简简单单写一个框架;

    import threading


    class Producter(threading.Thread):
    pass


    class Consumer(threading.Thread):
    pass


    def main():
    pass


    if __name__ == '__main__':
    main()

    然后我们一步一步进行;

    3.2 初步获取页面有效信息

    import requests
    from lxml import etree

    Url = 'https://dou.yuanmazg.com/doutu?page=1'
    Header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
    Page_get = requests.get(url=Url, headers=Header)
    Page_content = Page_get.text
    Page_message = etree.HTML(Page_content)
    Page_div = Page_message.xpath('//div[@class="page-content"]')[0]
    Page_div = etree.tostring(Page_div, pretty_print=True, method='html').decode('utf-8')
    print(Page_div)

    3.3  提取每一个图片的​​url​​​和​​name​​

    import requests
    from lxml import etree

    Url = 'https://dou.yuanmazg.com/doutu?page=1'
    Header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
    Page_get = requests.get(url=Url, headers=Header)
    Page_content = Page_get.text
    Page_message = etree.HTML(Page_content)
    Page_div = Page_message.xpath('//div[@class="page-content"]//a//img')
    # Page_div = etree.tostring(Page_div, pretty_print=True, method='html').decode('utf-8')
    # print(Page_div)
    for i in Page_div:
    # print(etree.tostring(i, pretty_print=True, method='html').decode('utf-8'))
    Page_url = 'https://dou.yuanmazg.com' + i.xpath("@data-original")[0]
    Page_name = i.xpath("@alt")[0]
    print(Page_url)
    print(Page_name)

    输出结果如下:

    python爬虫-26-批量爬取表情包,让你斗图再也不会陷入无图可发的窘境_运维工程_03

    3.4 优化名字

    我们可以看到我们获取的图片的名字中有特殊符号,但是我们的电脑上文件名字是不可以出现特殊符号的,那么我们是不是就需要把名字给他处理一下呢,优化走起,优化之后的代码如下:

    import requests
    from lxml import etree
    import re

    Url = 'https://dou.yuanmazg.com/doutu?page=1'
    Header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
    Page_get = requests.get(url=Url, headers=Header)
    Page_content = Page_get.text
    Page_message = etree.HTML(Page_content)
    Page_div = Page_message.xpath('//div[@class="page-content"]//a//img')
    # Page_div = etree.tostring(Page_div, pretty_print=True, method='html').decode('utf-8')
    # print(Page_div)
    for i in Page_div:
    # print(etree.tostring(i, pretty_print=True, method='html').decode('utf-8'))
    Page_url = 'https://dou.yuanmazg.com' + i.xpath("@data-original")[0]
    Page_name = i.xpath("@alt")[0]
    Page_name = re.sub(r'[,。??,/\\·\*\ ]', '', Page_name)
    print(Page_url)
    print(Page_name)

    随之我们又发现了另一个问题,那就是有些图片他是没有添加描述的,也就是无法获取该图片的名字,那么我们就随机给他一个名字吧;

    import requests
    from lxml import etree
    import re
    import random

    Url = 'https://dou.yuanmazg.com/doutu?page=1'
    Header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
    Page_get = requests.get(url=Url, headers=Header)
    Page_content = Page_get.text
    Page_message = etree.HTML(Page_content)
    Page_div = Page_message.xpath('//div[@class="page-content"]//a//img')
    # Page_div = etree.tostring(Page_div, pretty_print=True, method='html').decode('utf-8')
    # print(Page_div)
    for i in Page_div:
    # print(etree.tostring(i, pretty_print=True, method='html').decode('utf-8'))
    Page_url = 'https://dou.yuanmazg.com' + i.xpath("@data-original")[0]
    Page_name = i.xpath("@alt")[0]
    Page_name = re.sub(r'[,。??,/\\·\*\ ]', '', Page_name)
    if Page_name == "":
    Page_name = str(random.random())
    print(Page_url)
    print(Page_name)

    到这里是不是名字这个事儿就完事儿了呢,当然不了,想一下,我们在电脑上创建文件的时候是不是还需要后缀名呢,那我们就应该也把后缀名获取一下子,再次优化之后,代码如下:

    import requests
    from lxml import etree
    import re
    import random
    import os

    Url = 'https://dou.yuanmazg.com/doutu?page=1'
    Header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
    Page_get = requests.get(url=Url, headers=Header)
    Page_content = Page_get.text
    Page_message = etree.HTML(Page_content)
    Page_div = Page_message.xpath('//div[@class="page-content"]//a//img')
    # Page_div = etree.tostring(Page_div, pretty_print=True, method='html').decode('utf-8')
    # print(Page_div)
    for i in Page_div:
    # print(etree.tostring(i, pretty_print=True, method='html').decode('utf-8'))
    Page_url = 'https://dou.yuanmazg.com' + i.xpath("@data-original")[0]
    Suffix = os.path.splitext(Page_url)[1]
    Page_name = i.xpath("@alt")[0]
    Page_name = re.sub(r'[,。??,/\\·\*\ ]', '', Page_name)
    if Page_name == "":
    Page_name = str(random.random()) + Suffix
    else:
    Page_name = Page_name + Suffix
    print(Page_url)
    print(Page_name)

    运行之后结果如下:

    python爬虫-26-批量爬取表情包,让你斗图再也不会陷入无图可发的窘境_html_04

    好的,这样子的话我们就成功的使用​​python​​获取了每一个页面中每一个图片的地址和名字

    3.5 下载

    当我们获取到了图片的下载地址,以及图片名字之后,我们就可以进行下载了,那么我们的代码就变成了下面的内容:

    剩余内容请转至VX公众号 “运维家” ,回复 “187” 查看。



    ------ “运维家” ,回复 “187”  ------

    ------ “运维家” ,回复 “187”  ------

    ------ “运维家” ,回复 “187”  ------


    运维工程师是干什么的,收单猫运维工程师,武威光伏运维工程师,西安运维交付工程师招聘,石家庄网络运维工程师招聘;

    数据中心运维基础工程师,运维工程师刚进公司什么都不会,顺丰的it运维工程师,佛山IDC机房运维工程师招聘,武汉仕云运维工程师加班多吗;

    运维工程师T1,设施运维工程师转型,erp运维工程师培训课题,江西环保运维工程师招聘,通富微电子桌面运维工程师;

    成都科技园运维工程师招聘,运维工程师的英语怎么说,运维工程师ppt,粤电风 电运维工程师咋样,运维工程师的薪酬。



    【文章原创作者:华为云代理 http://www.558idc.com/hw.html处的文章,转载请说明出处】
    网友评论