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. 第十三章 ZYNQ-MIZ702 PL中断请求

    本篇文章主要介绍外设(PL)产生的中断请求,在PS端进行处理. 在PL端通过按键产生中断,PS接受到之后点亮相应的LED. 本文所使用的开发板是Miz702 PC 开发环境版本:Vivado 2015 ...

  2. rabbitmq消息队列,消息发送失败,消息持久化,消费者处理失败相关

    转:https://blog.csdn.net/u014373554/article/details/92686063 项目是使用springboot项目开发的,前是代码实现,后面有分析发送消息失败. ...

  3. hdu 1502 大数dp

    对于每一个dp的问题 从其最优解的结构(分哪几种形式或者情况)入手 然后分析状态 这样就比较好找出状态转方程这里数据结构的选择很简单 顺序数组就可以 填充的方式顺序填充就可以 然后这道题目卡了我大数. ...

  4. Vue大概知识体系和学习参考

    Vue大概知识体系和学习参考文档 官方文档学习,参考,借鉴地址:https://cn.vuejs.org/v2/guide/installation.html 菜鸟教程:https://www.run ...

  5. gdb-example-ncurses

    gdb-example-ncurses http://www.brendangregg.com/blog/2016-08-09/gdb-example-ncurses.html 1. The Prob ...

  6. linux grep/awk/cut/egrep/echo/经验

    1. 例子 http://www.test.com/atk/pki/test-1.1.tar.gz 过滤出test-1.1.tar.gz t = http://www.test.com/atk/pki ...

  7. Ubuntu12.04 root登陆方法【保证有效】

    su -取得root权限后,gedit /etc/lightdm/lightdm.conf ,里面的内容全部改为 [SeatDefaults] greeter-session=unity-greete ...

  8. spring cloud EurekaClient 多网卡 ip 配置 和 源码分析(转)

    https://blog.csdn.net/qq_30062125/article/details/83856655 1.前言对于spring cloud,各个服务实例需要注册到Eureka注册中心. ...

  9. 小程序e.currentTarget与e.target 两个属性的区别

    注册事件是获取小程序组件上面的自定义属性值 e.target是获取当前点击的标签上面的自定义属性 e.currentTarget是获取注册点击事件标签内的自定义属性

  10. ADF为EO的ITEM添加默认值

    Literal:设置为缺省的静态值.Expression:使用 Groovy 表达式设置缺省值.下面是一个表达式,用于将数据库序列(EMPLOYEES_SEQ)作为主键的缺省值:(new oracle ...