网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
cookies存储在客户端,被称为浏览器 cookie 或跟踪 cookies,cookies 是一种小型的,经常加密的文本文件,位于浏览器目录中。当用户的浏览器加载特定网站时,Cookies 就会被创建。 网站将信息发送到浏览器,然后创建文本文件。 每次用户回到同一个网站,浏览器就会检索并将这个文件发送到网站的服务器上。网站服务器设置 cookies 以帮助验证用户,如果用户登录到一个安全区域的网站。 登录信息存储在 cookie 中,这样用户就可以进入和离开网站,而无需重复输入相同的身份验证信息。
session存储在服务器端,,我们知道,我们用浏览器打开一个网页,用到的是HTTP协议,学过计算机的应该都知道这个协议,它是无状态的,什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。但是这种无状态的的好处是快速。当用户登录后,需要把用户信息保存到session中,便于确保用户操作权限,在其它页面通过检查session是否为null可以知道用户是否登录。
http定义的与服务器交互的几种方法:get 仅仅获取资源的信息,不增加或者修改数据。post 一般丢该服务器上的资源,一般我们通过form表单进行提交请求put 增加delete 删除
用法如下:
import requests requests.get("http://www.baidu.com") requests.post("http://www.jd.com") requests.put("http://www.jd.com") requests.delete("http://www.jd.com")
Requests中text和content的区别是什么r.text返回的是str类型的数据。r.content返回的是bytes型也就是二进制的数据。也就是说,如果你想取文本,可以通过r.text。如果想取图片,文件,则可以通过r.content。
既然我们可以对header信息进行更改,那么为了防止反爬虫操作,我们可以通过定义一个list,然后再通过random模块随机取一个header信息进行访问。流行浏览器的user-agent参考:https://blog.csdn.net/zhengqijun_/article/details/80207496
Requests通过会话信息来获取cookie信息Cookie的五要素:Name value domain path expires
import requests def save_cookie(): s = requests.session() s.get('https://www.hao123.com/') print(s.cookies) print(s.cookies.keys()) print(s.cookies.values()) for i in s.cookies: print(i) print(i.name, i.value, i.domain, i.path, i.expires) save_cookie() 结果: <RequestsCookieJar[<Cookie BAIDUID=3B72F56E3AC1DBE36501A4C8AEE5E1E1:FG=1 for .hao123.com/>, <Cookie __bsi=11962264801410047351_00_51_N_N_117_0303_c02f_Y for .www.hao123.com/>, <Cookie hz=0 for .www.hao123.com/>, <Cookie ft=1 for www.hao123.com/>, <Cookie v_pg=normal for www.hao123.com/>]> ['BAIDUID', '__bsi', 'hz', 'ft', 'v_pg'] ['3B72F56E3AC1DBE36501A4C8AEE5E1E1:FG=1', '11962264801410047351_00_51_N_N_117_0303_c02f_Y', '0', '1', 'normal'] <Cookie BAIDUID=3B72F56E3AC1DBE36501A4C8AEE5E1E1:FG=1 for .hao123.com/> <Cookie __bsi=11962264801410047351_00_51_N_N_117_0303_c02f_Y for .www.hao123.com/> <Cookie hz=0 for .www.hao123.com/> <Cookie ft=1 for www.hao123.com/> <Cookie v_pg=normal for www.hao123.com/> v_pg normal www.hao123.com / None
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。
使用已知cookie信息,如何访问网站
url = 'http://httpbin.org/cookies' r = requests.get(url, cookies={'key1': 'value1', 'key2': 'value2'}) print(r.text) 结果: { "cookies": { "key1": "value1", "key2": "value2" } }
采集时为避免被封IP,经常会使用代理。requests也有相应的proxies属性。例如:西刺代理。
import requests proxies = { "http": "http://182.108.5.246:8118", # "https": "http://112.117.184.219:9999", } r1 = requests.get("http://2017.ip138.com/ic.asp", proxies=proxies) r2 = requests.get("http://2017.ip138.com/ic.asp") print(r1.text) print(r2.text) [182.108.5.246] [106.38.115.34] 如果代理需要账户和密码,则需这样: proxies = { "http": "http://user:pass@10.10.1.10:3128/", }
Requests给你提供的所有接口,在传输数据的时候,都可以以key:value的形式进行传输。如果你使用urllib,那么你就没有这么幸运了,很多事情都需要你自己去处理,并不可以直接通过dict的形式进行传输,需要进行转换。
转载于:https://www.cnblogs.com/yangjian319/p/9179860.html