umei-spider
umei-spider

1 #!/usr/bin/python3
2
3 import requests
4 from bs4 import BeautifulSoup
5 from contextlib import closing
6 import time
7 import uuid
8
9
10 class SevenOneSixZero:
11 def __init__(self):
12 self.photo_id = []
13 self.url = 'http://www.umei.cc/tags/xiezhen_1.htm'
14 self.urls = []
15 self.headers = {
16 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
17 }
18
19 def get_ids(self):
20 res = requests.get(url=self.url, headers=self.headers)
21
22 def get_page_content(self, url):
23 res = requests.get(url, headers=self.headers)
24 r = res.text
25 # response.encoding是指从HTTP的header中猜测的响应内容编码方式 如果header中不存在charset,则默认编码为ISO-8859-1
26 # print(res.encoding)
27 # response.apparent_encoding是指从内容中分析出的响应内容编码方式。
28 # print(res.apparent_encoding)
29 # requests内部的 utils 也提供了一个从返回 body 获取页面编码的函数get_encodings_from_content,这样如果服务器返回的头不含 Charset,再通过 get_encodings_from_content 就可以知道页面的正确编码了
30 # print(requests.utils.get_encodings_from_content(r))
31 return r.encode(res.encoding).decode(res.apparent_encoding)
32
33 def get_img(self):
34 res = self.get_page_content(self.url)
35 soup = BeautifulSoup(res, 'lxml')
36 img_list = soup.select('body > div.wrap > div.TypeList > ul > li > a > img')
37 return img_list
38
39 def get_img_src_list(self):
40 img_list = []
41 for img in self.get_img():
42 img_dict = {
43 'src': img.get('src')
44 }
45 img_list.append(img_dict)
46 return img_list
47
48 def download_img(self, img_list):
49 """
50 下载图片
51 :param img_list:
52 :return:
53 """
54 i = 0
55 for img_dic in img_list:
56 # time.sleep(0.1)
57 src = img_dic['src']
58 res = requests.get(src, self.headers)
59 i = i + 1
60 with closing(res) as r:
61 name = uuid.uuid1()
62 with open('D:/python/imgs/{}.jpg'.format(name), 'ab+') as f:
63 for chunk in r.iter_content(chunk_size=1024):
64 if chunk:
65 f.write(chunk)
66 f.flush()
67 print('成功下载第{}张图:{}.jpg'.format(i,name ))
68
69 def get_url_list(self, start, end):
70 """
71 获取url列表
72 :param start:
73 :param end:
74 :return:
75 """
76 for i in range(start, end):
77 self.urls.append('http://www.umei.cc/tags/xiezhen_{}.htm'.format(i))
78 return self.urls
79
80
81 if __name__ == '__main__':
82 seven = SevenOneSixZero()
83
84 for url in seven.get_url_list(22, 30):
85 seven.url = url
86 img_list = seven.get_img_src_list()
87 seven.download_img(img_list)

umei-spider的更多相关文章
- spider RPC入门指南
本部分将介绍使用spider RPC开发分布式应用的客户端和服务端. spider RPC中间件基于J2SE 8开发,因此需要确保服务器上安装了JDK 8及以上版本,不依赖于任何额外需要独立安装和配置 ...
- Scrapy:为spider指定pipeline
当一个Scrapy项目中有多个spider去爬取多个网站时,往往需要多个pipeline,这时就需要为每个spider指定其对应的pipeline. [通过程序来运行spider],可以通过修改配置s ...
- spider RPC过滤器
spider支持在请求执行前或完成后进行特殊处理,比如安全性检查.敏感字段混淆等等.为此,spider提供了BeforeFilter和AfterFilter.其执行位置如下图所示: 流水线插件配置在s ...
- spider RPC插件化体系
为了满足灵活扩展的需要,spider支持灵活的自定义插件扩展,从功能上来说,插件和过滤器的差别在于过滤器不会阻止请求的执行同时对于主程序不会有API上的影响(比如servlet 过滤器和监听器)(最多 ...
- spider RPC管理接口
为了在独立管理模式下尽可能的容易运行时排查问题,spider中间件提供了一系列restful api用于动态管理当前节点的路由,下游节点等.目前支持的RESTFUL API如下所示: 功能 服务号 R ...
- spider RPC高级特性
多租户 spider原生支持多租户部署,spider报文头对外开放了机构号.系统号两个属性用于支持多租户场景下的路由. 多租户场景下的路由可以支持下述几种模式: n 系统号: n 系统号+服务号( ...
- spider RPC安全性
spider提供了多重安全保障机制,目前主要支持接入握手校验,报文完整性校验,报文加密,报文长度检查四种机制. 接入认证 spider使用两次握手校验,其握手流程如下: 签名AES加密的方式实现. l ...
- spider RPC开发指南
协议与兼容性 spider使用java语言开发,使用Spring作为IoC容器,采用TCP/IP协议,在此基础上,结合SaaS系统模式的特性进行针对性和重点设计,以更加灵活和高效的满足多租户系统.高可 ...
- spider 配置文件参考
spider有一个配置文件spider.xml,为xml格式,spider.xml采用DTD进行管理,用于管理spider的所有特性.路由.高可用等. 配置文件支持三种不同的方式进行指定: 1. 通过 ...
- spider RPC性能测试报告
测试环境部署结构 测试用例 类 别 说明 请求报文 194字节({"systemId":"PL","appVersion":"qq ...
随机推荐
- PB做的托盘程序(最小化后在左下角显示图标)
见‘文件’资源
- Prometheus Operator 自动发现和持久化
Prometheus Operator 自动发现和持久化 之前在 Prometheus Operator 下面自定义一个监控选项,以及自定义报警规则的使用.那么我们还能够直接使用前面课程中的自动发现功 ...
- spring boot logback无感配置
spring boot1.5.x版本的日志配置一直有一个问题,就是不能直接通过yml配置文件进行日志文件大小进行动态和方便的配置. 怎么解决?直接在springboot项目的maven工程中的src/ ...
- 怎样启动Nginx并设置开机自动运行
1. 启动 sudo systemctl start nginx.service 2. 设置开机自动运行 sudo systemctl enable nginx.service
- luogu2261余数求和题解--整除分块
题目链接 https://www.luogu.org/problemnew/show/P2261 分析 显然\(k\) \(mod\) \(i=k-\lfloor {k/i}\rfloor\) \(\ ...
- MUI 支付案例(支付宝/微信)
首先说明一下,本文借鉴了多位博主的文章,所以会看到很多一样的代码. 写这篇博客主要目的是为了便于后期查看(不好之处,敬请留言吐槽),案例经本人测试,是可以使用的. 先上效果图 前端HTML代码: &l ...
- DX使用随记--其他
1. 百分号显示格式 百分号:{0:P}表示显示为百分号模式.如数据源中为0.5.表示出来为50%
- beego学习笔记一:创建第一个beego Web项目 转
前提工作 环境搭建,可以参考如下两篇教程:搭建Go语言环境1搭建Go语言环境2 安装beego beego 的安装是典型的 Go 安装包的形式: go get github.com/astaxie/b ...
- 把app(apk和ipa文件)安装包放在服务器上供用户下方法
怎么把app(apk和ipa文件)安装包放在服务器上供用户下载? IIS服务器网站不能下载.apk文件的原因:IIS的默认MIME类型中没有.apk文件,所以无法下载.解决办法:给.apk格式文件添加 ...
- 第一章、Django概述
目录 第一章.Django概述 一.了解软件开发架构 二.HTTP协议 三.响应状态码 四.请求方式 五.基于wsgiref模块 六..动静态网页 七.python三大主流web框架 八.安装Djan ...