python requests模块(爬虫)

一.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信息,访问网站:

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)
运行之后,cookie信息正常显示。
{"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)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值