- 爬虫系列总目录
- 一、 模拟登录
- 1.1 selenium登录163邮箱
- 1.2 cookie和session
- 1.3 验证码处理
- 二、 IP代理池
- 三、 动态页面处理
- 功能说明:
登录位于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()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)