一.Cookie的常用属性:
Cookie常用的一些属性:1. Domain 域
2. Path 路径
3. Expires 过期时间
4. name 对应的key值
5. value key对应的value值
cookie中的domain代表的是cookie所在的域,默认情况下就是请求的域名,例如请求http://www.server1.com/files/hello, 那么响应中的set-Cookie默认会使用www.server1.com作为cookie的domain,在浏览器中也是按照domain来组织cookie的。 我们可以在响应中设置cookie的domain为其他域,但是浏览器并不会去保存这些domain为其他域的cookie。
cookie中的path能够进一步的控制cookie的访问,当path=/; 当前域的所有请求都可以访问到这个cookie。 如果path设为其他值,比如path=/test,那么只有/test下面的请求可以访问到这个cookie。
1.查看cookie信息。
import requests
url = "http://www.hao123.com"
session = requests.session()
session.get(url=url)
cookies = session.cookies
for cookie in cookies:
print(cookie.name)
print(cookie.value)
print(cookie.domain)
print(cookie.path)
print(cookie.expires)
print("**"*10)
运行之后可以看到信息:
BAIDUID
EF2192F1233C55595CBF3FEC493D018A:FG=1
.hao123.com
/
1560592280
********************
hz
0
.www.hao123.com
/
None
********************
ft
1
www.hao123.com
/
1529078399
********************
v_pg
normal
www.hao123.com
/
None
********************
2.使用已知cookie信息,访问网站:
运行之后,cookie信息正常显示。import requests #定义cookie信息 cookie = dict(_ga="GA1.2.208618761.1528809975", _gid="GA1.2.604525626.1528979734", PHPSESSID="ait0b8c22ofqpo630cekpc33b6", _gat="1", Hm_lvt_0936ebcc9fa24aa610a0079314fec2d3="1528809975,1528809984,1528979734,1528980228", Hm_lpvt_0936ebcc9fa24aa610a0079314fec2d3="1528980228", ape__Session="ait0b8c22ofqpo630cekpc33b6")
#定义URL,向该网站传递cookie,成功则返回cookie的信息。
url = "http://httpbin.org/cookies" session = requests.session()
#传入URL,cookie res = session.get(url=url, cookies=cookie)
#解决中文乱码问题 res.encoding = res.apparent_encoding print(res.text)
{"cookies":{"Hm_lpvt_0936ebcc9fa24aa610a0079314fec2d3":"1528980228","Hm_lvt_0936ebcc9fa24aa610a0079314fec2d3":"1528809975,1528809984,1528979734,1528980228","PHPSESSID":"ait0b8c22ofqpo630cekpc33b6","_ga":"GA1.2.208618761.1528809975","_gat":"1","_gid":"GA1.2.604525626.1528979734","ape__Session":"ait0b8c22ofqpo630cekpc33b6"}}
二.代理访问
采集时为避免被封IP,经常会使用代理。requests也有相应的proxies属性。
import requests #该网址会判断IP的归属地 url = "http://2018.ip138.com/ic.asp" #定义代理IP,可从网上搜 proxy = {"http": "http://221.228.17.172:8181"}
#如果代理需要账户和密码,则需这样:
#proxy = {"http": "http://user:passwd@10.10.1.10:3128/"} #使用代理访问 res1 = requests.get(url=url, proxies=proxy)
#不使用代理 res2 = requests.get(url=url)
res1.encoding = res1.apparent_encoding res2.encoding = res2.apparent_encoding #输出各自的返回信息 print(res1.text) print("###"*10) print(res2.text)
运行之后可以看见,使用代理成功。
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title> 您的IP地址 </title>
</head>
<body style="margin:0px"><center>您的IP是:[221.228.17.172] 来自:江苏省南京市 电信</center></body></html>
##############################
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title> 您的IP地址 </title>
</head>
<body style="margin:0px"><center>您的IP是:[14.130.56.236] 来自:北京市北京市 鹏博士宽带</center></body></html>
三.下载图片
import codecs import requests
#找个图片的连接 url = "http://www.sixgod.club/img/beijing.png"
#定义URL,流形式 res = requests.get(url=url, stream=True) #下载 with codecs.open("TP.jpg", "wb") as f: for chunk in res.iter_content(10000): f.write(chunk)
运行之后可以看见图片文件已生成。
小练习:自动下载网址上的图片。
需要根据实际情况编写,这里使用自己的网址比较简单,仅供参考。
import codecs
import re
import requests
#获取网址的源码
url = "http://www.sixgod.club"
r = requests.get(url=url)
r.encoding = r.apparent_encoding
html = r.text
#根据获取的源码使用正则分析出图片的位置
reg = re.compile(r"<img\ssrc=\"(.*?)\"")
urlli = reg.findall(html)
#定义一个列表,将URL进行拼接。
urls = list()
for i in urlli:
url = "http://www.sixgod.club/{0}".format(i)
urls.append(url)
#循环列表中的元素,下载图片。
for shuzi in range(len(urls)):
for j in urls:
res = requests.get(url=j, stream=True)
with codecs.open("{0}.jpg".format(shuzi), "wb") as f:
for chunk in res.iter_content(10000):
f.write(chunk)