欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

这些是我花了三天整理的最实用Python爬虫模拟登陆的一些方法!

程序员文章站 2022-07-28 16:58:20
1. 目标网页 这是我们要获取内容的网页: radar.itjuzi.com/investevent 这个网页需要先登录才能看到数据信息,登录界面如下: 可以看到,只需要输入账号和密码就可以登录,不用输验证码,比较简单。下面我们利用一个测试账号和密码,来实现模拟登录。 私信菜鸟007获取源码以及教程 ......
这些是我花了三天整理的最实用Python爬虫模拟登陆的一些方法!

1. 目标网页

这是我们要获取内容的网页:

radar.itjuzi.com/investevent

这些是我花了三天整理的最实用Python爬虫模拟登陆的一些方法!

这个网页需要先登录才能看到数据信息,登录界面如下:

这些是我花了三天整理的最实用Python爬虫模拟登陆的一些方法!

可以看到,只需要输入账号和密码就可以登录,不用输验证码,比较简单。下面我们利用一个测试账号和密码,来实现模拟登录。

私信菜鸟007获取源码以及教程哦!

2. post 提交请求登录

首先,我们要找到 post 请求的 url。

有两种方法,第一种是在网页 devtools 查看请求,第二种是在 fiddler 软件中查看。

先说第一种方法。

这些是我花了三天整理的最实用Python爬虫模拟登陆的一些方法!

在登录界面输入账号密码,并打开开发者工具,清空所有请求,接着点击登录按钮,这时便会看到有大量请求产生。哪一个才是 post 请求的 url呢?这个需要一点经验,因为是登录,所以可以尝试点击带有 「login」字眼的请求。这里我们点击第四个请求,在右侧 headers 中可以看到请求的 url,请求方式是 post类型,说明 url 找对了。

这些是我花了三天整理的最实用Python爬虫模拟登陆的一些方法!

接着,我们下拉到 form data,这里有几个参数,包括 identify 和 password,这两个参数正是我们登录时需要输入的账号和密码,也就是 post 请求需要携带的参数。

这些是我花了三天整理的最实用Python爬虫模拟登陆的一些方法!

参数构造非常简单,接下来只需要利用 requests.post 方法请求登录网站,然后就可以爬取内容了。

下面,我们尝试用 fiddler 获取 post 请求。

如果你对 fiddler 还不太熟悉或者没有电脑上没有安装,可以先了解和安装一下。

fiddler 是位于客户端和服务器端的 http 代理,也是目前最常用的 http 抓包工具之一 。 它能够记录客户端和服务器之间的所有 http 请求,可以针对特定的 http 请求,分析请求数据、设置断点、调试 web 应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是 web 调试的利器。

fiddler 下载地址:

www.telerik.com/download/fi…

使用教程:

zhuanlan.zhihu.com/p/37374178

www.hangge.com/blog/cache/…

下面,我们就通过 fiddler 截取登录请求。

当点击登录时,官场 fiddler 页面,左侧可以看到抓取了大量请求。通过观察,第15个请求的 url中含有「login」字段,很有可能是登录的 post 请求。我们点击该请求,回到右侧,分别点击「inspectors」、「headers」,可以看到就是 post 请求,该 url 和上面的方法获取的 url 是一致的。

这些是我花了三天整理的最实用Python爬虫模拟登陆的一些方法!

接着,切换到右侧的 webforms 选项,可以看到 body 请求体。也和上面方法中得到的一致。

这些是我花了三天整理的最实用Python爬虫模拟登陆的一些方法!

获取到 url 和请求体参数之后,下面就可以开始用 requests.post 方法模拟登录了。

代码如下:

import requests
headers = {
'user-agent': 'mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/66.0.3359.181 safari/537.36',
}
data = {
'identity':'irw27812@awsoo.com',
'password':'test2018',
}
url ='https://www.itjuzi.com/user/login?redirect=&flag=&radar_coupon='
session = requests.session()
session.post(url,headers = headers,data = data)
# 登录后,我们需要获取另一个网页中的内容
response = session.get('http://radar.itjuzi.com/investevent',headers = headers)
print(response.status_code)
print(response.text)
复制代码

使用 session.post 方法提交登录请求,然后用 session.get 方法请求目标网页,并输出 html代码。可以看到,成功获取到了网页内容。

这些是我花了三天整理的最实用Python爬虫模拟登陆的一些方法!

下面,介绍第 2 种方法。

3. 获取 cookies,直接请求登录

上面一种方法,我们需要去后台获取 post 请求链接和参数,比较麻烦。下面,我们可以尝试先登录,获取 cookie,然后将该 cookie 添加到 headers 中去,然后用 get 方法请求即可,过程简单很多。

代码如下:

import requests
headers = {
'user-agent': 'mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/66.0.3359.181 safari/537.36',
'cookie': '你的cookie',
}
url = 'https://www.itjuzi.com/user/login?redirect=&flag=&radar_coupon='
session = requests.session()
response = session.get('http://radar.itjuzi.com/investevent', headers=headers)
print(response.status_code)
print(response.text)
复制代码

可以看到,添加了 cookie 后就不用再 post 请求了,直接 get 请求目标网页即可。可以看到,也能成功获取到网页内容。

这些是我花了三天整理的最实用Python爬虫模拟登陆的一些方法!

下面介绍第 3 种方法。

4. selenium 模拟登录

这个方法很直接,利用 selenium 代替手动方法去自动输入账号密码然后登录就行了。

关于 selenium 的使用,在之前的一篇文章中有详细介绍,如果你不熟悉可以回顾一下:

www.makcyun.top/web_scrapin…

代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import by
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.wait import webdriverwait
browser = webdriver.chrome()
browser.maximize_window() # 最大化窗口
wait = webdriverwait(browser, 10) # 等待加载10s
def login():
browser.get('https://www.itjuzi.com/user/login')
input = wait.until(ec.presence_of_element_located(
(by.xpath, '//*[@id="create_account_email"]')))
input.send_keys('irw27812@awsoo.com')
input = wait.until(ec.presence_of_element_located(
(by.xpath, '//*[@id="create_account_password"]')))
input.send_keys('test2018')
submit = wait.until(ec.element_to_be_clickable(
(by.xpath, '//*[@id="login_btn"]')))
submit.click() # 点击登录按钮
get_page_index()
def get_page_index():
browser.get('http://radar.itjuzi.com/investevent')
try:
print(browser.page_source) # 输出网页源码
except exception as e:
print(str(e))
login()
复制代码

这里,我们在网页中首先定位了账号节点位置: '//*[@id="create_account_email"]' ,然后用 input.send_keys 方法输入账号,同理,定位了密码框位置并输入了密码。接着定位 登录 按钮的位置: //*[@id="login_btn"] ,然后用 submit.click() 方法实现点击登录按钮操作,从而完成登录。可以看到,也能成功获取到网页内容。

这些是我花了三天整理的最实用Python爬虫模拟登陆的一些方法!