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的更多相关文章

  1. spider RPC入门指南

    本部分将介绍使用spider RPC开发分布式应用的客户端和服务端. spider RPC中间件基于J2SE 8开发,因此需要确保服务器上安装了JDK 8及以上版本,不依赖于任何额外需要独立安装和配置 ...

  2. Scrapy:为spider指定pipeline

    当一个Scrapy项目中有多个spider去爬取多个网站时,往往需要多个pipeline,这时就需要为每个spider指定其对应的pipeline. [通过程序来运行spider],可以通过修改配置s ...

  3. spider RPC过滤器

    spider支持在请求执行前或完成后进行特殊处理,比如安全性检查.敏感字段混淆等等.为此,spider提供了BeforeFilter和AfterFilter.其执行位置如下图所示: 流水线插件配置在s ...

  4. spider RPC插件化体系

    为了满足灵活扩展的需要,spider支持灵活的自定义插件扩展,从功能上来说,插件和过滤器的差别在于过滤器不会阻止请求的执行同时对于主程序不会有API上的影响(比如servlet 过滤器和监听器)(最多 ...

  5. spider RPC管理接口

    为了在独立管理模式下尽可能的容易运行时排查问题,spider中间件提供了一系列restful api用于动态管理当前节点的路由,下游节点等.目前支持的RESTFUL API如下所示: 功能 服务号 R ...

  6. spider RPC高级特性

    多租户 spider原生支持多租户部署,spider报文头对外开放了机构号.系统号两个属性用于支持多租户场景下的路由. 多租户场景下的路由可以支持下述几种模式: n  系统号: n  系统号+服务号( ...

  7. spider RPC安全性

    spider提供了多重安全保障机制,目前主要支持接入握手校验,报文完整性校验,报文加密,报文长度检查四种机制. 接入认证 spider使用两次握手校验,其握手流程如下: 签名AES加密的方式实现. l ...

  8. spider RPC开发指南

    协议与兼容性 spider使用java语言开发,使用Spring作为IoC容器,采用TCP/IP协议,在此基础上,结合SaaS系统模式的特性进行针对性和重点设计,以更加灵活和高效的满足多租户系统.高可 ...

  9. spider 配置文件参考

    spider有一个配置文件spider.xml,为xml格式,spider.xml采用DTD进行管理,用于管理spider的所有特性.路由.高可用等. 配置文件支持三种不同的方式进行指定: 1. 通过 ...

  10. spider RPC性能测试报告

    测试环境部署结构 测试用例 类 别 说明 请求报文 194字节({"systemId":"PL","appVersion":"qq ...

随机推荐

  1. java-filter and listener

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. 使用 Serv ...

  2. el-table el-column selection disable

    几个要点: 1.通过 selectable 绑定 2.绑定的方法只能返回0/1 <el-table-column type="selection" width="5 ...

  3. pm2 常用操作

    PM2全局安装 npm i pm2 -g PM2启动.net core pm2 start "dotnet xxx.dll" --name api //name后面跟你要取的名字 ...

  4. HDU5124lines题解-堆+贪心的一个新方法

    题目链接 https://cn.vjudge.net/problem/HDU-5124 胡扯 感觉说新方法好像有点不太好,但是翻了十几篇博客都是清一色离散化之类的... 为什么会做这道题呢?因为前几天 ...

  5. javaweb开发技术--监听器

    监听器定义:是指专门用于其他对象身上发生的事件或状态改变进行监听和相应的处理的对象,当被监视的对象发生变化时立即采取相应的行动. web监听器的定义:servlet规范中定义的一种特殊类.用于监听Se ...

  6. 对于div里面内容过大根据长度或者宽度进行适配,然后可以滚轮缩放的功能

    在做3000的项目中,因为页面的svg很大,但是做的只是适配电脑,打开肯定是看不全的,要看全就必须进行滚动,可是客户提出了将页面放在电视机上面,用电视输入网址直接访问,这样问题就来了,电视上怎么进行滚 ...

  7. 关于小程序去除view/navigator 点击后默认阴影效果

    hover:class  :定义容器在被触发时的样式 通常无用,但若不去除则影响用户体验: 为避免被覆盖,约定在wxss底部添加class,比如: <!-- wxml --> <na ...

  8. c# 如何把一个同步方法变成异步方法

    1 例如有同步方法如下: private static void GenerateFile(DataTable dt) { } 2 变为异步方法 private static void Generat ...

  9. JPA的API介绍、工具类抽取

    1.Persistence对象 Persistence对象主要作用是用于获取EntityManagerFactory对象的 .通过调用该类的createEntityManagerFactory静态方法 ...

  10. Python学习记录6-list、tuple、dict、set复习

    数据类型在一门语言中是非常重要的,所以选择再次学习一下加深记忆.本次主要参考了大神廖雪峰的官方网站,非常感谢大神,讲的很清晰,收获很大. 标准数据类型 Number(数字) String(字符串) L ...