第三章 Selenium验证码与代理 2021-10-23

第三章 Selenium验证码与代理 2021-10-23,第1张

第三章 Selenium验证码与代理 2021-10-23 爬虫系列总目录

Selenium的动态HTML及验证码处理 IP代理池使用
  • 爬虫系列总目录
  • 一、 模拟登录
    • 1.1 selenium登录163邮箱
    • 1.2 cookie和session
    • 1.3 验证码处理
  • 二、 IP代理池
  • 三、 动态页面处理

一、 模拟登录 1.1 selenium登录163邮箱
  • 功能说明:
    登录位于iframe标签内,修改相应的定位方法,同时切换到iframe 窗口后才可输入。
from selenium import webdriver
import time
# 定义变量接受账号密码
users = input('邮箱账号:')
pwd = input('邮箱密码:')
driver = webdriver.Chrome()
driver.get('https://mail.163.com/')
time.sleep(2)
# 匹配到iframe标签对象
iframe = driver.find_element_by_xpath('//iframe[@scrolling="no"]')
# 切换到iframe窗口
driver.switch_to.frame(iframe)
# 定位到账号输入的input标签并且输入账号
driver.find_element_by_xpath('//input[@name="email"]').send_keys(users)
time.sleep(2)
# 定位到密码输入的input标签并且输入密码
driver.find_element_by_xpath('//input[@name="password"]').send_keys(pwd)
time.sleep(2)
# 定位到登录按钮 并且点击
driver.find_element_by_xpath("//*[@id='dologin']").click()
time.sleep(10)
driver.close()
1.2 cookie和session

二者重要的区别

  • cookie是在客户端保持状态的机制,session是在服务端保持状态的机制。
  • cookie在客户端可以被编辑伪造,不是十分安全。
import requests

# 访问网站,获取session信息
session = requests.Session()
r = session.get('https://www.guazi.com/buy', headers=headers)
print(r.cookies.get_dict())

# 从网页复制cookie信息,传递至请求
# 也可以放字符串放到header中
c = "xxx"
cookie = {}
for i in c.split(';'):
    cookie[i.split('=')[0]] = i.split('=')[1]
res = requests.get(url, headers=headers, cookies=cookie)
print(res.json()['data']['postList'][1])
1.3 验证码处理

识别获取到的验证码(下载验证码文件),建议使用现有平台,超级鹰或者图鉴,查看的API 文档获取调用方法。

# 请求验证码
res = requests.get(url=img_url, headers=headers)
img_res = res.content

# 保存验证码到本地,检验结果
# with open('yzm.png', 'wb') as f:
#     f.write(img_res)

# 超级鹰的使用方法,将图片数据发送,获取验证码
cjy = chaojiying.Chaojiying_Client(username='xxxx',password='xxxx',soft_id='923501')
pic_str= cjy.PostPic(img_res, 1902)['pic_str']
二、 IP代理池
  • 当爬虫代码访问频率达到了目标网站的预警值时,就可能触发目标网站的反爬机制。而封禁访问者ip就是很常见的一个反爬机制。

  • 当ip被封禁后,从此ip发出的请求将不能得到正确的响应。这种时候,我们就需要一个IP代理池。

  • 爬虫ip代理到底是什么
    代理服务器 --> 转发请求和响应

  • 代理匿名度
    1 透明代理 : 就算用了这种代理 服务器也知道你是使用了代理ip的,并且还知道你的真实ip
    2 匿名代理 : 知道你使用了代理, 但是不知道你的真实ip
    3 高匿名代理 : 不知道你使用代理, 也不知道你的真实ip

使用快代理代理,个人学习可使用免费的,快代理访问过快,ip会被禁止。 付费代理可使用精灵代理,经济实惠。

使用代理后,通过访问https://2021.ip138.com/ 查看自己的ip地址是否改变, 或与代理ip 相一致认为代理可用, python 代理不可用时,会换回本地ip 。 免费的代理基本不具有匿名性。

"""
{
'http': 'ip:port',
'https':'ip:port'
}
"""
# proxies 为字典,结果如上图所示。
url = 'https://2021.ip138.com/'
print(requests.get(url=url, headers=headers, proxies=random.choice(proxy_list)).content.decode())
三、 动态页面处理

selenium 滑动上下的滚动条,实现对页面的加载。

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://search.jd.com/Search?keyword=%E8%8B%B9%E6%9E%9C13')
time.sleep(5)
driver.execute_script('window.scrollTo(0,2000)')
time.sleep(5)
# 滑到顶部
driver.execute_script('window.scrollTo(0,0)')
time.sleep(5)
# 滑到底部
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(5)
driver.close()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4696849.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-07
下一篇 2022-11-07

发表评论

登录后才能评论

评论列表(0条)

保存