from urllib.request import urlretrieve
urlretrieve(xxx)
/
urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)
将URL表示的网络对象复制到本地文件。如果URL指向本地文件,则对象将不会被复制,除非提供文件名。返回一 个 元组()(filename,header),其中filename是可以找到对象的本地文件名,header是urlopen()返回的对象的info()
方法(用于远程对象)。第二个参数(如果存在)指定要复制到的文件位置(如果没有,该位置将是一个生成名称的temp
file)。第三个参数,如果存在,则是一个回调函数,它将在建立网络连接时调用一次,并且在此后每个块读取后调
用一次。这个回调函数将传递三个参数;到目前为止传输的块计数,以字节为单位的块大小,以及文件的总大小。第
三个参数可能是-1,在旧的FTP服务器上,它不返回文件大小以响应检索请求。
url:外部或者本地urlfilename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来
保存数据);reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调
。我们可以利用这个回调函数来显示当前的下载进度。data:指post到服务器的数据。该方法返回一个包含两个
元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。
import os
import urllib
import sys
import requests
DATA_URL = 'www.python.org/ftp/python/…'
filename = DATA_URL.split('/')[-1]
def _progress(block_num, block_size, total_size):
'''回调函数
@block_num: 已经下载的数据块
@block_size: 数据块的大小
@total_size: 远程文件的大小
'''
sys.stdout.write('\r>> Downloading %s %.1f%%' % (filename,
float(block_num * block_size) / float(total_size) * 100.0))
sys.stdout.flush()
复制代码
filepath, _ = urllib.request.urlretrieve(DATA_URL, filename, _progress)
print()
例子中的sys.stdout.write和print差不多是输出的意思,sys.stdout.flush()函数的作用是刷新输出
- python模块中requests参数stream
当下载大的文件的时候,建议使用streaM模式.
默认情况下是false,他会立即开始下载文件并存放到内存当中,倘若文件过大就会导致内存不足的情况.
当把get函数的stream参数设置成True时,它不会立即开始下载,当你使用iter_content或iter_lines遍历内容或
访问内容属性时才开始下载。需要注意一点:文件没有下载之前,它也需要保持连接。
iter_content:一块一块的遍历要下载的内容
iter_lines:一行一行的遍历要下载的内容
使用上面两个函数下载大文件可以防止占用过多的内存,因为每次只下载小部分数据。
示例代码:
r = requests.get(url_file, stream=True)
f = open("file_path", "wb")
for chunk in r.iter_content(chunk_size=512):
if chunk:
f.write(chunk)
复制代码
urlopen返回的应答对象response(或者HTTPError实例)有两个很有用的方法info()和geturl()
1.geturl():
这个返回获取的真实的URL,这个很有用,因为urlopen(或者opener对象使用的)或许会有重定向。获取的URL或许
跟请求URL不同。
time
time .sleep() 间歇休息
time.ctime() 返回当前时间的字符串版本
random 随机数生成器
random.seed(5) 随机数种子为5
取样random模块里
shuffle(a)洗牌 打乱顺序 无返回值,原地修改原始列表顺序。
choice(a) 随机选择列表一个值
sample(a,3)随机选取几个值
一些快捷键:
ctrl+shift+i=F12啊…
ctrl+F 查找
抓包
当你要抓的包是需要按F5刷新才出来的,一般我们需要的请求都在DOC里面(整个页面有刷新)
当你要抓的包是点击按钮"加载更多"(或者拖到页面最下面会自动加载的,整个页面并没有刷新)一般我们需要的请求都在XHR里面
简单来讲就是如果整个页面没有刷新的话,那就是在XHR里面,否则在DOC里面
因为本次抓包整个页面有刷新,所以,我们需要找的请求在DOC下面,可以看到只有一个请求
headers 里面我们都有介绍过(请求头,返回头)
preview和response里面的内容是相同的(preview里面的内容格式化了,输出的好看一些),里面的内容是html返回值
cookies 里面是cookie的值,只不过分成了key value的形式
当你要抓的网页是会自动跳转的话,那么你需要选中“proserve log”
OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
PUT:向指定资源位置上传其最新内容。
DELETE:请求服务器删除Request-URI所标识的资源。
TRACE:回显服务器收到的请求,主要用于测试或诊断。 trace
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。 connect
常见状态代码、状态描述、说明:
200 OK //请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常