模拟登录
- 流程:
- 对点击登录按钮对应的请求进行发送(post请求)
- 处理参数:
- 用户名
- 密码
- 验证码
- 其他防伪参数
某网登录
https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx
import ddddocr
import requests
from lxml import etree
ocr = ddddocr.DdddOcr()
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.3538.77 Safari/537.36'
}
url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
# 1、先将验证码下载到本地
response = requests.get(url=url, headers=headers).text
tree = etree.HTML(response)
# 解析验证码图片地址
img_src = 'https://so.gushiwen.cn/' + tree.xpath('//*[@id="imgCode"]/@src')[0]
img_data = requests.get(url=img_src, headers=headers).content
# 图片识别
res = ocr.classification(img_data)
# 2、拼接好数据后发请求
data = {
'__VIEWSTATE': '/g8t04nmWMIHtrpE8eGPh2KXJR6afoVeEJC4uDyTld71PWYjENBp/vVflShsohSk7YD+NGiebe2wY1oYNJIwzPvTzNLSM3zmXvQTffx0rIxmhYoHXbKy0YeYbA0=',
'__VIEWSTATEGENERATOR': 'C93BE1AE',
'from': 'http://so.gushiwen.cn/user/collect.aspx',
'email': 'xuwang@protonmail.com',
'pwd': '123456',
'code': res, # 动态变化
'denglu': '登录'
}
page_text = requests.post(url=url, headers=headers, data=data).text
with open('./古诗网.html', 'w', encoding='utf-8') as fp:
fp.write(page_text)
模拟登陆失败
原因:
- Cookie
- 验证码问题
登陆成功:session请求(解决)
import ddddocr
import requests
from lxml import etree
ocr = ddddocr.DdddOcr()
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.3538.77 Safari/537.36'
}
url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
# 1、先将验证码下载到本地
response = requests.get(url=url, headers=headers).text
tree = etree.HTML(response)
# 解析验证码图片地址
img_src = 'https://so.gushiwen.cn/' + tree.xpath('//*[@id="imgCode"]/@src')[0]
img_data = requests.get(url=img_src, headers=headers).content
# 图片识别
res = ocr.classification(img_data)
# 2、拼接好数据后发请求
data = {
'__VIEWSTATE': '/g8t04nmWMIHtrpE8eGPh2KXJR6afoVeEJC4uDyTld71PWYjENBp/vVflShsohSk7YD+NGiebe2wY1oYNJIwzPvTzNLSM3zmXvQTffx0rIxmhYoHXbKy0YeYbA0=',
'__VIEWSTATEGENERATOR': 'C93BE1AE',
'from': 'http://so.gushiwen.cn/user/collect.aspx',
'email': 'xuwang@protonmail.com',
'pwd': '123456',
'code': res, # 动态变化
'denglu': '登录'
}
page_text = requests.post(url=url, headers=headers, data=data).text
with open('./古诗网.html', 'w', encoding='utf-8') as fp:
fp.write(page_text)
在请求参数中如果看到一组乱序的请求参数,最好去验证这组请求参数是否为动态变化
处理:
-
方式一:常规来讲一般动态变化的请求参数会被隐藏在前台页面中,需要去前台源码中寻找
-
方式二:如果前台页面没有的话,就可以基于浏览器抓包工具进行全局搜索
基于百度AI实现爬虫功能
- 图像识别
- 语音识别&合成
- 自然语言处理
某视频爬取
- 将每个视频详情的url进行解析
- 对视频详情页的url进行请求发送
- 在视频详情页的页面源码数据中进行全局搜索,发现没有找到vidoe标签
- 视频标签是动态加载出来的
- 动态加载的数据方式
- ajax
- js
- 在页面源码中搜索.mp4,定位到了视频地址(存在一组js代码)
- 通过正则将视频地址解析出来发起请求即可