赞
踩
1、User_Agent 浏览器类型、版本信息等
2、Referer 表示我们从哪个连接跳转过来的
3、Cookis 登录信息
1、模拟用户浏览器的User_Agent
2、模拟用户登录
(1) requestes 的 post 请求
(2) WebDriver(Selenium ) 模拟浏览器行为
3、验证码
(1)使用第三方库
#安装第三方库
pip install fake-useragent
from fake_useragent import UserAgent
# 不进行ssl验证,否者会造成请求UserAgent失败
ua = UserAgent(verify_ssl=False)
# 模拟不同的浏览器
print(f'Chrome浏览器: {ua.chrome}')
# print(ua.safari) #safari浏览器
# print(ua.ie) #ie浏览器
# 随机返回头部信息,推荐使用
print(f'随机浏览器: {ua.random}')
(2)查看网页返回头中的User_Agent
当我们的爬虫无法获取到网页信息的时候,我们可以比对我们用浏览器访问时的头部信息,检查自己缺少了那些头部信息。
Referer 可以在Response headers找到,写到我们的请求头就可以了
对于简单的爬虫,在Request Headers 里面就能够找到很多用于爬虫的信息。
cookies 其实我们可以直接在Request Headers中获得,但是cookies有是有租期限制的,手动更改对于复杂的爬虫程序太过繁琐。cookis可以用来模拟用户登录,里面有用户的登录信息。
HTTP的GET和POST请求方法
1、GET 方法
import requests
r = requests.get('https://github.com')
#打印状态码
print(r.status_code)
#答应头部信息的内容类型
print(r.headers['content-type'])
# r.text
#返回字符编码
print(r.encoding)
# r.json()
2、 POST 方法
import requests
r = requests.post('http://httpbin.org/post', data = {'key':'value'})
r.json()
使用cookies模拟登录
1.找到登录请求发送到那个URL
2.定义post请求,参照Form Data的格式
request实现模拟登陆
import time import requests from fake_useragent import UserAgent # ua = UserAgent(verify_ssl=False) headers = { 'User-Agent' : ua.random, 'Referer' : 'https://accounts.douban.com/passport/login_popup?login_source=anony' } #使得多个请求在一个Session会话中 s = requests.Session() # 会话对象:在同一个 Session 实例发出的所有请求之间保持 cookie, # 期间使用 urllib3 的 connection pooling 功能。 # 向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升。 login_url = 'https://accounts.douban.com/j/mobile/login/basic' form_data = { 'ck':'', 'name':'15055495@qq.com', 'password':'', 'remember':'false', 'ticket':'' } # post数据前获取cookie pre_login = 'https://accounts.douban.com/passport/login' pre_resp = s.get(pre_login, headers=headers) #携带这个cookies 进行登陆 response = s.post(login_url, data=form_data, headers=headers, cookies=s.cookies) # 登陆后可以进行后续的请求 # url2 = 'https://accounts.douban.com/passport/setting' #使用已经登陆的会话发起后续的请求 # response2 = s.get(url2,headers = headers) #开启新的会话,但是携带了经过登录的会话的cookies # response3 = newsession.get(url3, headers = headers, cookies = s.cookies) #对返回信息进行保存 # with open('profile.html','w+') as f: # f.write(response2.text)
为什么要在post请求前进行一次请求,并在post请求时,携带cookies,因为如果不携带cookies未登录前的页面都有可能访问失败
有时候我们在输入完密码登录时,会有一个滑动验证码,这时候我们可以使用 WebDriver 来完成这个验证操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。