目录
- requests安装
- requests使用get请求
- requests伪装头信息
- requests使用ip代理
- request使用post请求
- request设置超时参数
- request忽略ssl证书验证
- requests携带cookies请求
- 并利用selenium获取cookies
1.安装
在ubuntu中 Ctrl+Alt+T 进入终端,输入
pip3 install request
如果安装比较慢可以使用清华的镜像源在终端中输入
pip3 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
在Windows中在user目录中创建一个pip目录,再新建文件pip.ini输入
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com
在使用pip安装即可,中文官方文档:
快速上手 - Requests 2.18.1 文档requests.readthedocs.io2.get请求
安装好了之后导入请求一下
import
我们看一下返回结果
成功返回数据遇到反爬的网站怎么办?
3.伪装头部信息
response = requests.get('https://www.douban.com')
print(response.content.decode())
没有返回任何内容,我们需要伪装一下
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}
response = requests.get('https://www.douban.com',headers=headers)
print(response.content.decode())
4.使用ip代理
我们使用爬虫访问速度极快,很容易就被封ip,这时候我们就需要使用代理
proxies = {'https': 'https://61.145.49.72:47301','http': 'http://61.145.49.72:47301'}
# 注意这里你访问的是http,就用http的协议,是http就写https
response = requests.get('https://httpbin.org/ip', proxies=proxies)
print(response.content.decode())
5.post请求
对于post请求比较麻烦,在复杂的网站中需要找真正的post地址,以及需要post的数据,有些网站是静态 的那就很好找,要是动态的或者是js生成的那就有一丝丝的蛋疼.
我们先找一个简单 的试试手我们还是用豆瓣
按下F12 点击Firefox 是"网络" chrome是"network" 然后输入假的账号密码点击登录
右下角可以看到这里有个post请求 点进去看右边
请求网址:https://accounts.douban.com/j/mobile/login/basic
点击参数 看一下这里的表单数据,我们不知到ck remember 还有 ticket 是什么 那就先不要管他,我们先把name还有password 封装在字典中发送请求看一下
session = requests.session()
data = { 'name': '17647687661', 'password': 'chenchen'}
response = session.post('https://accounts.douban.com/j/mobile/login/basic', data=data, headers=headers)
r = session.get('https://www.douban.com/people/214681716/', headers=headers)
# 然后请求需要登录才可以访问的页面print(r.content.decode())
发现访问成功,要是发现ck remember 还有 ticket是变化的就需要在去找,他们是怎么生成的,可能是在响应中生成也可能是在js中生成就需要去分析6.设置超时参数
设置超时参数还是比较重要的,因为网络波动比较大,或者是IP质量不好的时候都用的到
requests.get('http://www.baidu.com', timeout=0.01)
7.忽略证书验证
当我们要爬取的网站出现了这种情况怎么办
requests也提供了解决办法
requests.get('http://www.baidu.com', timeout=0.1,verify=False)
8.携带cookie请求
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),(服务器告诉浏览器设置一下cookie),浏览器自动会将Cookie以key/value保存到某个目录下的文本文件内,下次请求同一网站时也会自动发送该Cookie给服务器,即添加在请求头部(前提是浏览器设置为启用cookie)。
requests库提供了session()类可以保持会话链接
有一些页面是需要登陆后才可以访问的比如豆瓣主页
我们在浏览器登录上之后呢,服务器会生成cookie保存在本地,在一定时间内不需要输入密码就可以登录
我们取出来cookie
ll="118114"; bid=AGoJo_ppX6c; _pk_ref.100001.8cb4=%5B%22%22%2C%22%22%2C1586227178%2C%22https%3A%2F%2Faccounts.douban.com%2Fpassport%2Flogin_popup%3Flogin_source%3Danony%22%5D; _pk_id.100001.8cb4=50075549b2426688.1586166908.3.1586227183.1586224916.; __utma=30149280.2008290944.1586166909.1586224918.1586227180.3; __utmz=30149280.1586227180.3.3.utmcsr=accounts.douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/passport/login_popup; __gads=ID=ed14fffde2b8f90a:T=1586166919:S=ALNI_Ma0lK0htPP56LR6x1mxr7qG1vA3OA; push_noty_num=0; push_doumail_num=0; __utmv=30149280.21468; douban-profile-remind=1; __utmc=30149280; dbcl2="214681716:frsbMiEpHUs"; ck=N_78; _pk_ses.100001.8cb4=*; ap_v=0,6.0; __utmb=30149280.4.10.1586227180; __utmt=1
这个也是以字典的形式封装
session = requests.session()
# 实例化session对象
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}
cookies = {'cookies':'ll="118114"; bid=AGoJo_ppX6c; _pk_ref.100001.8cb4=%5B%22%22%2C%22%22%2C1586227178%2C%22https%3A%2F%2Faccounts.douban.com%2Fpassport%2Flogin_popup%3Flogin_source%3Danony%22%5D; _pk_id.100001.8cb4=50075549b2426688.1586166908.3.1586227183.1586224916.; __utma=30149280.2008290944.1586166909.1586224918.1586227180.3; __utmz=30149280.1586227180.3.3.utmcsr=accounts.douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/passport/login_popup; __gads=ID=ed14fffde2b8f90a:T=1586166919:S=ALNI_Ma0lK0htPP56LR6x1mxr7qG1vA3OA; push_noty_num=0; push_doumail_num=0; __utmv=30149280.21468; douban-profile-remind=1; __utmc=30149280; dbcl2="214681716:frsbMiEpHUs"; ck=N_78; _pk_ses.100001.8cb4=*; ap_v=0,6.0; __utmb=30149280.4.10.1586227180; __utmt=1'}
response = session.get('https://www.douban.com/people/214681716/', cookies=cookies, headers=headers)
# 使用session对象去访问,session会自动填写cookieprint(response.content.decode())
这里cookies放进headers中也是可以的
豆瓣主页的id肯定是全豆瓣唯一的
我们在返回的代码中查找一下'214681716'
完全OK我们并没有输入账号密码就可以对登录后内容进行爬取
当然我们不能每次都去复制一下当前的cookie放到代码中吧,在复杂的网站中我们可以使用selenium模拟登录然后获取到cooki
cookies = driver.get_cookies()
a.使用selenium获取cookies
演示一下使用selenium获取cookies 然后requests使用cookies进行豆瓣登录
import requests
from selenium import webdriverheaders = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}
driver = webdriver.Firefox()
# 实例化对象driver.get('https://www.douban.com/')
# 访问豆瓣try:driver.switch_to.frame(0)
except:print("进入frame失败")driver.quit()
# 进入表单try:driver.find_element_by_xpath('/html/body/div[1]/div[1]/ul[1]/li[2]').click()print('点击账号密码登录')driver.find_element_by_xpath('//*[@id="username"]').send_keys('17647687661')print('输入账号')driver.find_element_by_xpath('//*[@id="password"]').send_keys('chenchen')print('输入密码')driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[5]/a').click()print('点击登录成功')
except:print("点击失败")driver.quit()
# 模拟登录cookies_list = driver.get_cookies()
# 获取 cookies 列表driver.quit()
# 关闭实例print(cookies_list)
print(type(cookies_list))
# 查看获取到的cookies以及类型cookie = [item["name"] + "=" + item["value"] for item in cookies_list]
# 进行提取cookies_str = '; '.join(item for item in cookie)
# 将','换成'; 'session = requests.session()
# 新建session对象cookies = {'cookies': cookies_str}
# 添加cookiesresponse = session.get('https://www.douban.com/people/214681716/', cookies=cookies, headers=headers)
print(response.content.decode())
-------------------------------------------------------
点击账号密码登录
输入账号
输入密码
点击登录成功
[{'name': 'll', 'value': '"118114"', 'path': '/', 'domain': '.douban.com', 'secure': False, 'httpOnly': False, 'expiry': 1617781221}, {'name': 'bid', 'value': 'meZ1BBIeVmg', 'path': '/', 'domain': '.douban.com', 'secure': False, 'httpOnly': False, 'expiry': 1617781221}, {'name': '_pk_id.100001.8cb4', 'value': 'b3cf1aa38622cf60.1586245224.1.1586245224.1586245224.', 'path': '/', 'domain': 'www.douban.com', 'secure': False, 'httpOnly': False, 'expiry': 1649317223}, {'name': '_pk_ses.100001.8cb4', 'value': '*', 'path': '/', 'domain': 'www.douban.com', 'secure': False, 'httpOnly': False, 'expiry': 1586247023}, {'name': '__utma', 'value': '30149280.1791308185.1586245227.1586245227.1586245227.1', 'path': '/', 'domain': '.douban.com', 'secure': False, 'httpOnly': False, 'expiry': 1649317227}, {'name': '__utmc', 'value': '30149280', 'path': '/', 'domain': '.douban.com', 'secure': False, 'httpOnly': False}, {'name': '__utmz', 'value': '30149280.1586245227.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)', 'path': '/', 'domain': '.douban.com', 'secure': False, 'httpOnly': False, 'expiry': 1602013227}, {'name': '__utmt', 'value': '1', 'path': '/', 'domain': '.douban.com', 'secure': False, 'httpOnly': False, 'expiry': 1586245827}, {'name': '__utmb', 'value': '30149280.1.10.1586245227', 'path': '/', 'domain': '.douban.com', 'secure': False, 'httpOnly': False, 'expiry': 1586247027}, {'name': 'dbcl2', 'value': '"214681716:AEzLSpOCgMY"', 'path': '/', 'domain': '.douban.com', 'secure': False, 'httpOnly': True}, {'name': 'ck', 'value': 'qkAd', 'path': '/', 'domain': '.douban.com', 'secure': False, 'httpOnly': False}]
<class 'list'>
<!DOCTYPE html>
<html lang="zh-cmn-Hans" class="ua-linux ua-webkit">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="renderer" content="webkit"><meta name="referrer" content="always"><meta name="google-site-verification" content="ok0wCgT20tBBgo9_zat2iAcimtN4Ftf5ccsh092Xeyw" /><title>
wandou
</title>
.....
.....
我们成功使用cookies登录
http://weixin.qq.com/r/hT-I0NTEA4l8rZCz92qX (二维码自动识别)
本文链接:https://my.lmcjl.com/post/4378.html
4 评论