一. requests 模块初级使用爬取 案例(线程)
1. uuid的模块使用
UUID是由一组32位数的16进制数字所构成,是故UUID理论上的总数为1632=2128,约等于3.4 x 1038。也就是说若每纳秒产生1兆个UUID,要花100亿年才会将所有UUID用完。 UUID的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的32个字符。示例: 550e8400-e29b-41d4-a716-446655440000 UUID亦可刻意重复以表示同类。例如说微软的COM中,所有组件皆必须实现出IUnknown接口,方法是产生一个代表IUnknown的UUID
。无论是程序试图访问组件中的IUnknown接口,或是实现IUnknown接口的组件,只要IUnknown一被使用,皆会被参考至同一个ID:00000000-0000-0000-C000-000000000046。
import uuid aa=str(uuid.uuid4()) print(aa) print(type(aa)) # b4e074c4-32a6-42a2-a5d1-7e074b075fc4 # <class 'str'>
2. Requests模块说明
Requests 是使用 Apache2 Licensed 许可证的 HTTP 库。用 Python 编写,真正的为人类着想。
Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了。它是为另一个时代、
另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。
在Python的世界里,事情不应该这么麻烦。
Requests 使用的是 urllib3,因此继承了它的所有特性。Requests 支持 HTTP 连接保持和连接池,支持使用 cookie
保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。现代、国际化、人性化。
(以上转自Requests官方文档)
# # 爬取图片 (就是下载图片到本地) import uuid import requests # requests是使用Apache2 licensed 许可证的HTTP库。 这个模块里面封装了socket 里面所有方法 方法一 效率极其低
ret_li = ["https://www2.autoimg.cn/youchuang/g26/M07/AD/13/autohomecar__ChcCP10QOdWAUAlRAApDJLmcF98280.jpg", "https://qnwww2.autoimg.cn/youchuang/g26/M05/A9/7F/autohomecar__ChsEe10QOeaAK0GhAAUwvnKQrtI797.jpg", "https://www2.autoimg.cn/youchuang/g2/M0A/AA/74/autohomecar__ChsEkF0QOhmAcixZAAg7i966t0Q279.jpg", ] for ret in ret_li: res = requests.get(ret) """ requests.get(ret) 里面干了那些事情 1. DNS 解析域名 根据域名解析ip 2.创建socket 客服端 类似 sk=socket.socket() 3. 向服务端发起连接请求 类似 sk.connent() 4.发送数据(发送图片) sk.send(......) 5. 接收数据 sk.recv(1024) """ filename = str(uuid.uuid4()) + ".jpg" with open(filename, "wb") as f1: f1.write(res.content) print("*******************************************************88")
方法二 通过线程来实现 效率高 import threading ret_li = ["https://www2.autoimg.cn/youchuang/g26/M07/AD/13/autohomecar__ChcCP10QOdWAUAlRAApDJLmcF98280.jpg", "https://qnwww2.autoimg.cn/youchuang/g26/M05/A9/7F/autohomecar__ChsEe10QOeaAK0GhAAUwvnKQrtI797.jpg", "https://www2.autoimg.cn/youchuang/g2/M0A/AA/74/autohomecar__ChsEkF0QOhmAcixZAAg7i966t0Q279.jpg", ] def fun(url): res=requests.get(url) """ requests.get(ret) 里面干了那些事情 1. DNS 解析域名 根据域名解析ip 2.创建socket 客服端 类似 sk=socket.socket() 3. 向服务端发起连接请求 类似 sk.connent() 4.发送数据(发送图片) sk.send(......) 5. 接收数据 sk.recv(1024) """ filename = str(uuid.uuid4()) + ".jpg" with open(filename, "wb") as f1: f1.write(res.content) for url in ret_li: aa =threading.Thread(target=fun,args=(url,)) aa.start()