"""
爬取斗图吧里面的所有表情包

知识点总结:
一、使用requests库进行爬取,随机请求头(网站反爬措施少。挂个请求头足矣)
二、具体思路:
1.先爬取所有的图片url,放在列表里
2.循环遍历url请求这些图片,
3.将图片进行分类保存
三、分类保存用到一个知识点,endwith(以***结尾)
使用这个函数,将jpg,gif,png等不同类型的图片分开
四、演示案例中,只爬取了前20页。
五、各个定义的数字变量意思为:
n=1 网页页数
num=1 保存图片数

注:该案例主要是练习
    1.图片的保存,应注意,保存时使用字节流的形式。
    2.书写爬虫代码的逻辑思维。
"""
from fake_useragent import FakeUserAgent
import requests
import re
import time
import random
def getUrls():
# 将获取到的url列表在放到list这个列表里
url_list=[]
n=1
while True:
url = f"http://www.doutula.com/article/list/?page={n}"
headers = {
"User-Agent":FakeUserAgent().random
}
htmlStr = requests.get(url,headers=headers).text
# print(htmlStr)

# 定义 提取图片url的正则
urls = r'data-original="(.*?)"'
# 编译
urls = re.compile(urls)
#正则提取
urls = re.findall(urls,htmlStr)
url_list.append(urls)
print("正在收集第%s页的图片"%n)
n = n + 1
# 设置延时
time.sleep(0.5)
# 当n=21的时候,爬虫程序停止.为了演示方便只保存前二十页其实共有615页
if n == 21:
break
print(len(url_list))
return url_list

# 保存图片
# 以字节的形式将图片保存
def download(url_list):
num = 1
for urls in url_list:
for url in urls:
header={
"User-Agent":FakeUserAgent().random
}
# 因为爬取到的图片有两种,所以写了一个判断条件,分类保存,
if url.endswith('.jpg'):
# 保存到本地
with open('./img/%s.jpg'%num,'wb') as file:
# 获取到图片 字节
img = requests.get(url, headers=header)
file.write(img.content)
print("正在保存第%s张图片"%num)
num += 1
time.sleep(0.3)
elif url.endswith('.gif'):
# 保存到本地
with open('./img/%s.gif' % num, 'wb') as file:
# 获取到图片 字节
img = requests.get(url, headers=header)
file.write(img.content)
print("正在保存第%s张图片" % num)
num += 1
time.sleep(0.3)

if __name__ == '__main__':
url_list=getUrls()
download(url_list)

spider_爬取斗图啦所有表情包(图片保存)的更多相关文章

  1. python多线程爬取斗图啦数据

    python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...

  2. 爬取斗图网图片,使用xpath格式来匹配内容,对请求伪装成浏览器, Referer 防跨域请求

    6.21自我总结 一.爬取斗图网 1.摘要 使用xpath匹配规则查找对应信息文件 将请求伪装成浏览器 Referer 防跨域请求 2.爬取代码 #导入模块 import requests #爬取网址 ...

  3. python爬取斗图网中的 “最新套图”和“最新表情”

    1.分析斗图网 斗图网地址:http://www.doutula.com 网站的顶部有这两个部分: 先分析“最新套图” 发现地址栏变成了这个链接,我们在点击第二页 可见,每一页的地址栏只有后面的pag ...

  4. Python爬取 斗图表情,让你成为斗图大佬

    话不多说,上结果(只爬了10页内容) 上代码:(可直接运行)   用到Xpath #encoding:utf-8 # __author__ = 'donghao' # __time__ = 2018/ ...

  5. 爬虫之爬取豆瓣top250电影排行榜及爬取斗图啦表情包解读及爬虫知识点补充

    今日内容概要 如何将爬取的数据直接导入Excel表格 #如何通过Python代码操作Excel表格 #前戏 import requests import time from openpyxl impo ...

  6. py3+requests+urllib+bs4+threading,爬取斗图图片

    实现原理及思路请参考我的另外几篇爬虫实践博客 py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图:http://www.cnblogs.com/UncleYong/p/6892688. ...

  7. shell爬取斗图网

    #!/bin/bash read -p "请输入要爬取的页面数(默认为10):" page_num page_num=${page_num:-} echo $page_num re ...

  8. Python 2.7和3.6爬取妹子图网站单页测试图片

    1.url= http://www.mzitu.com/74100/x,2为1到23的值 2.用到模块 os 创建文件目录; re模块正则匹配目录名 图片下载地址; time模块 限制下载时间;req ...

  9. Python 2.7_爬取妹子图网站单页测试图片_20170114

    1.url= http://www.mzitu.com/74100/x,2为1到23的值 2.用到模块 os 创建文件目录; re模块正则匹配目录名 图片下载地址; time模块 限制下载时间;req ...

  10. scrapy-爬取斗图

    scrapy-爬取斗图代码   <一> 开局三连杀    1.创建run的文件  

随机推荐

  1. MySQL 合并查询join 查询出的不同列合并到一个表中

    为了求解问题时思路清晰,建议先分列查询,再将列合并到一个表中,这样相当于将复杂问题拆解为简单问题,一一解决.优点是避免所有问题混在一起,代码逻辑清晰,可迁移性强,下次遇到类似的查询问题能快速求解,缺点 ...

  2. FAQ docker进程启动失败处理案例分享

    docker进程启动失败处理 背景 有同学反馈在启动docker的时候遇到了如下问题:docker启动报错 [root@wuxianfeng ~]# systemctl start docker Jo ...

  3. LeetCode_806. 写字符串需要的行数

    题目 难度:简单 原文:https://leetcode-cn.com/problems/number-of-lines-to-write-string/ 题目 我们要把给定的字符串 S 从左到右写到 ...

  4. Solon2 开发之容器,八、动态代理的本质

    在 Java 里动态代理,主要分:接口动态代理 和 类动态代理.因为它的代理类都是动态创建的,所以名字里会带上"动态". 官网的有些地方叫"代理",也有些地方叫 ...

  5. P25_wxss - rpx单位

    模板样式 - rpx 什么是 rpx 尺寸单位 rpx(responsive pixel)是微信小程序独有的,用来解决屏适配的尺寸单位. rpx 的实现原理 rpx 的实现原理非常简单:鉴于不同设备屏 ...

  6. JZOJ 3479. 工作安排

    \(\text{solution}\) 比较显然的 \(dp\) 顺序既然无所谓,那为了方便处理贡献,就先排个序 然后设 \(f_i\) 表示分到前 \(i\) 个的最小工资 则 \(f_i=C+f_ ...

  7. 双端队列xLIS问题

    题目大意 有 \(N\) 个数 \(A_i\) ,他准备将他们依次插入一个双端队列(每次可以在头或尾插入一个元素),最后将 整个队列从尾到头看成一个序列,求出最长上升子序列的长度 .他想知道 , \( ...

  8. RabbitMQ基础和解疑

    一.基础概念 1. Producer:生产者,就是投递消息的一方 消息一般可以包含2个部分:消息体和标签(Label).消息体也可以称之为payload,在实际应用中,消息体一般是一个带有业务逻辑结构 ...

  9. NameError: name '_name_' is not defined

    if _name_ == '_main_': 错误的原因可能是name是双下划线.(明显下面的下划线要长一点) if __name_ == '_main__':

  10. LeetCode-429 N叉树的层次遍历

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal著作权归领扣网络所有.商业转载请联 ...