spider_爬取斗图啦所有表情包(图片保存)
"""
爬取斗图吧里面的所有表情包
知识点总结:
一、使用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_爬取斗图啦所有表情包(图片保存)的更多相关文章
- python多线程爬取斗图啦数据
python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...
- 爬取斗图网图片,使用xpath格式来匹配内容,对请求伪装成浏览器, Referer 防跨域请求
6.21自我总结 一.爬取斗图网 1.摘要 使用xpath匹配规则查找对应信息文件 将请求伪装成浏览器 Referer 防跨域请求 2.爬取代码 #导入模块 import requests #爬取网址 ...
- python爬取斗图网中的 “最新套图”和“最新表情”
1.分析斗图网 斗图网地址:http://www.doutula.com 网站的顶部有这两个部分: 先分析“最新套图” 发现地址栏变成了这个链接,我们在点击第二页 可见,每一页的地址栏只有后面的pag ...
- Python爬取 斗图表情,让你成为斗图大佬
话不多说,上结果(只爬了10页内容) 上代码:(可直接运行) 用到Xpath #encoding:utf-8 # __author__ = 'donghao' # __time__ = 2018/ ...
- 爬虫之爬取豆瓣top250电影排行榜及爬取斗图啦表情包解读及爬虫知识点补充
今日内容概要 如何将爬取的数据直接导入Excel表格 #如何通过Python代码操作Excel表格 #前戏 import requests import time from openpyxl impo ...
- py3+requests+urllib+bs4+threading,爬取斗图图片
实现原理及思路请参考我的另外几篇爬虫实践博客 py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图:http://www.cnblogs.com/UncleYong/p/6892688. ...
- shell爬取斗图网
#!/bin/bash read -p "请输入要爬取的页面数(默认为10):" page_num page_num=${page_num:-} echo $page_num re ...
- Python 2.7和3.6爬取妹子图网站单页测试图片
1.url= http://www.mzitu.com/74100/x,2为1到23的值 2.用到模块 os 创建文件目录; re模块正则匹配目录名 图片下载地址; time模块 限制下载时间;req ...
- Python 2.7_爬取妹子图网站单页测试图片_20170114
1.url= http://www.mzitu.com/74100/x,2为1到23的值 2.用到模块 os 创建文件目录; re模块正则匹配目录名 图片下载地址; time模块 限制下载时间;req ...
- scrapy-爬取斗图
scrapy-爬取斗图代码 <一> 开局三连杀 1.创建run的文件
随机推荐
- 主线程-创建Thread类的子类
主线程 Java使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码.Jav ...
- 怎么把Java,PHP,Vue等项目上传到GitHub,码云等
一.到github或者码云上建立一个私有或公开仓库(这里以github为例) 创建成功后我们得到了一个仓库地址,github上的操作完成,现在去项目内捣鼓 二.提交本地文件并推送 1.我是用命令的格式 ...
- ResponseBodyAdvice处理返回数据
package com.xf.config; import org.slf4j.MDC; import org.springframework.core.MethodParameter; import ...
- SpringBoot 整合Thymeleaf 、Thymeleaf常用标签
springboot 整合Thymeleaf Thymeleaf是目前流行的视图层的技术,Spring boot 官方推荐的使用Thymeleaf 什么是Thymeleaf? Thymeleaf是一个 ...
- Java 如何通过JDBC 操作数据库
JDBC 是Java 数据库连接,即 Java DataBase Connectivity.JDBC 可让Java 通过程序操作关系型数据库,可基于驱动程序实现与数据库的连接与操作.JDBC 有统一的 ...
- JZOJ 5354. 【NOIP2017提高A组模拟9.9】导弹拦截
题目 如题 分析 第一问很简单, \(dp\) 即可(得先排序) 第二问很经典,最小路径覆盖问题,最大流解决 \(n-Maxflow\) \(Code\) #include<cstdio> ...
- P2617 Dynamic Rankings 解题报告
link 整体二分是一种东西,比如上面这道题. 先考虑一个不带修版本的,也就是经典问题区间 kth,显然我们可以主席树但是我知道你很想用主席树但是你先别用不用主席树,用一种离线的算法,叫整体二分. 首 ...
- node.js 历史版本下载
https://nodejs.org/zh-cn/download/releases/
- Vue学习笔记之组件与通信
1. 组件 1.1. 什么是组件 组件是可复用的Vue实例, 说白了就是一组可以重复使用的模板,通常一个应用会以一棵嵌套的组件树的形式来组织: 例如,你可能会有页头.侧边栏.内容区等组件,每个组件又包 ...
- PostgreSQL TOAST技术解析
一.TOAST是什么? TOAST是"The Oversized-Attribute Storage Technique"(超尺寸字段存储技术)的缩写,主要用于存储一个大字段的值. ...