Python爬虫之模拟CSDN网站登录

来源:转载

Python爬虫之模拟CSDN网站登录

模拟网站登录的思路

在我们模拟网站登录之前,我们需要分析网站登入需要哪些数据。我们可以通过抓包工具,研究网站登录,以及登录访问的头信息变化。

1.打开csdn的登录页面

2.输入用户名和密码登录,使用fiddler抓包。(我们只是为了知道上传的数据结构,不需要输入正确的用户名和密码)。如下所示:

3.检查网页源代码,分析上传的post的数据

通过上面的抓包分析,我们知道post上传form表单数据的具体参数。

表单参数:

username=aaaaa&password=vvvvvv&lt=LT-518075-B1UABMXz7mIEo25UFRgOtqg5iJKFhM&execution=e1s2&_eventId=submit

我们发现,除了我们需要输入的用户名和密码外,还有其他的参数,那么其他参数表示什么呢?我们可以通过登入页面的源代码。如:

实际上lt参数,execution参数,_eventId参数都是在页面内写死的,其中_eventId参数是不变的。所以我们需要先抓取登录的页面,获取页面的ltexecution参数。在从通过form表单post数据,完成Python登录。具体代码实现,请看代码示例。

代码示例:

import requestsfrom bs4 import BeautifulSoupdef get_headers(): return { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36' }def write_html(text, filename): """ 将返回的响应信息写入文件 :param text: 响应页面内容 :param filename: 保存的文件名 :return: """ with open(filename, 'w', encoding='utf-8') as f: f.write(text)if __name__ == '__main__': # csdn登入的url login_url = "https://passport.csdn.net/account/login" # 通过requests的session请求 seesion = requests.session() # 通过get请求登录页面的url,获取响应数据 response = seesion.get(login_url, headers=get_headers()) # 输出响应码 print(response.status_code) # 将返回的html写入文件 write_html(response.text, 'get_login.html') # 使用BeautifulSoup解析html,使用lxml的方式解析 soup = BeautifulSoup(response.text, 'lxml') # 获取登入页面的input标签中lt的值,后面post表单上传登入信息需要 lt = soup.select('input[name="lt"]')[0]['value'] # 获取登入页面的input标签中execution的值,后面post表单上传登入信息需要 execution = soup.select('input[name="execution"]')[0]['value'] # 上传表单的data数据 data = { "username": "your-username", "password": "your-password", "lt": lt, "execution": execution, "_eventId": "submit" } # 打印data数据 print(data) # post请求上传data数据,模拟登入,获取响应结果 response = seesion.post(login_url, data=data, headers=get_headers()) # 打印响应的状态码 print(response.status_code) # 将响应的信息写入文件 write_html(response.text, 'login_success.html') # 通过get请求,请求个人主页,如果没有登入成功,则会返回登页,登入成功,则会获取到登入的个人信息 response = seesion.get('https://my.csdn.net/my/mycsdn', headers=get_headers()) # 打印响应码 print(response.status_code) # 将响应结果保存文件 write_html(response.text,'my.html')

最后,在my.html文件中,能获取登录的用户信息。因为我的页面跟多是使用js加载的,只能获取少量的数据。

分享给朋友:
您可能感兴趣的文章:
随机阅读: