python爬虫5:requests库-案例3
前言
python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。
申明
本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产生不好影响。
目录结构
文章目录
- python爬虫5:requests库-案例3
- 1. 目标
- 2. 详细流程
- 2.1 代理池的构建
- 2.2 目标确定
- 2.3 真实url确定
- 2.4 代码
- 3. 总结
1. 目标
本次案例的主要目标是帮助大家熟悉requests库中的会话维持技巧、代理构建等技巧。
再次说明,案例本身并不重要,重要的是如何去使用和分析,另外为了避免侵权之类的问题,我不会放涉及到网站的图片,希望能理解。
2. 详细流程
2.1 代理池的构建
代理池的作用之前已经讲过了,但是如何构建代理池呢?一般来说都是将那些可以使用的代理IP放入数据库中,后面写爬虫程序的时候再调用,因为代理池是可以一直使用的工具。
我之前写过一个脚本,就是利用一个爬虫专门去爬免费代理网站的代理IP,然后再写个爬虫去爬取目标网站。不过这里,我们就简单来,把一些可用的代理IP放入一个字典中即可。
2.2 目标确定
这次我换了一个小网站,具体地址我就不放了。
首先,利用上一篇的知识,虚假登录获取data参数值,结果如下:
可以发现的是,参数构建如下:
data = {
'action' : 'user_login',
'username' : 账号,
'password' : 密码,
'rememberme' : 1
}
2.3 真实url确定
在上一讲由于没能实际运行代码,所以忘记讲述这一点了。
就是我们登录页面的url有时候并不是我们在网页上看到的url,比如这个案例中,我在网页上看到的登录网址为:
xxxxxx_login.html
但是,实际上,我通过上面的POST页面,发现真实的网址其实是一个名为xxxxx.php
页面,所以大家一定要以抓取的POST页面信息为准,才可以快准狠地登录成功。
2.4 代码
有了上面的思路,代码就很简单了:
import requests
import time
# 网址
login_url = '真实登录网址'
home_url = '个人用户页面网址'
# 参数
username = input('请输入账号:')
password = input('请输入密码:')
data = {
'action': 'user_login',
'username': username,
'password': password,
'rememberme': '1'
}
# header参数
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
}
# 代理池
proxies = {
'http' :'http://ip:端口',
xxxxx
}
# 请求
session = requests.session()
# 登录
session.post(login_url,headers=headers,data=data,proxies=proxies)
time.sleep(6)
# 访问个人主页
response = session.get(home_url,headers=headers)
# 查看结果
print(response.status_code)
# 把个人用户界面网页拷贝下来证明登录成功
with open('home.html','w',encoding='utf-8') as f:
f.write(response.content.decode('utf-8'))
这里又补充一个知识点,就是你可以把网页源码保存到本地,以html后缀格式存储,然后可以用浏览器打开,这样可以直观看到爬取的结果。
此时,我这里的结果如下:
3. 总结
到这篇文章为止,requests库就讲解完毕了,这里我简单总结一下写请求代码时最需要注意的点:
- headers参数不能忘记,现在网站最基本的都会排查headers参数
- 写登录爬虫时,一定要去通过浏览器提供的后台工具,结合我上篇和这篇的知识点,去抓取真实提交的POST页面,找到参数和真实url
下一篇,开始讲解解析库的内容。