python爬虫之模拟登陆(豆瓣)

之前试着搞一下CSDN,结果把我给整懵了,所以啊,得找个软柿子捏一捏,就是觉得这次的目标好欺负。

这个就是登录页面啦
在这里插入图片描述
这就是我们的目标了,就是要请求这个登录后的
在这里插入图片描述

import requests

get_url = 'https://www.douban.com/people/233318987/'
header = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Mobile Safari/537.36',
}
html = requests.get(url, headers=header)

这就是直接打开的结果
在这里插入图片描述

像这种情况的处理法方法呢,有三种

  1. requests的post方法登陆
  2. 添加cookie
  3. selenium模拟浏览器登陆

咱们按顺序来逐一搞一下,

首先是post方法登陆,这个呢难度较大,需要抓包和分析

抓包分析当然是跑不掉的啦,这个就是我们post方法提交的链接
在这里插入图片描述
下面的使我们要提交的表单信息

在这里插入图片描述

import requests

get_url = 'https://www.douban.com/people/233318987/'
header = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Mobile Safari/537.36',
}
url = 'https://accounts.douban.com/j/mobile/login/basic'
data = {
    'remember': 'true',
    'name': 账号,
    'password': 密码
}
session = requests.Session()
resopnse = session.post(url, headers=header, data=data)
new_response = session.get(get_url, headers=header)
if new_response.status_code == 200:
    with open('new-html.html','wb')as f:
    	f.write(new_response.content)
    	f.close()
else:
	print('wrong')

这样 不就给整出来了嘛,nice
在这里插入图片描述
但是结果怎么和我们想要的不一样呢?那是因为我们请求的得到的只是网页的1.0版本,他还用到了Ajax,所以这个和渲染后的页面,也就是我们的目标页面是有差别的。而想要获取目标页面中的信息,可以找到相应的json文件,再用session.get获取就可以了。

第二种添加cookie

这是刚才那个登录文件内的cookie,将其添加到header中,然后直接使用requests.get方法请求就可以了。
在这里插入图片描述

get_url = 'https://www.douban.com/people/233318987/'

cookie = 'bid=VghJOH4JtUY; douban-fav-remind=1; ll="108297"; apiKey=; __utma=30149280.1885368446.1589424246.1589424246.1613568406.2; __utmc=30149280; __utmz=30149280.1613568406.2.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmt=1; ap_v=0,6.0; user_data={%22area_code%22:%22+86%22%2C%22number%22:%2217375102926%22%2C%22code%22:%224588%22}; vtoken=phone_register%20a383ec9cce484a08b7fc967787d8f557; last_login_way=phone; push_noty_num=0; push_doumail_num=0; __utmv=30149280.23331; UM_distinctid=177b030f2912d1-0e882d9b96217e-70266a36-8dcc0-177b030f292216; Hm_lvt_19fc7b106453f97b6a84d64302f21a04=1613568734; Hm_lpvt_19fc7b106453f97b6a84d64302f21a04=1613568734; _ga=GA1.2.1885368446.1589424246; _gid=GA1.2.1147932004.1613568734; _gat=1; __utmb=30149280.10.10.1613568406; login_start_time=1613568763410'
header = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Mobile Safari/537.36',
    'Cookie': cookie
}
new_response = requests.get(get_url, headers=header)
if new_response.status_code == 200:
    with open('new-html.html','wb')as f:
    	f.write(new_response.content)
    	f.close()
else:
	print('wrong')

这种方法就不需要在代码中添加账号和密码了

第三种selenium模拟浏览器

这种方法的速度相对较慢,但操作简单,是直接模仿浏览器的操作,通过元素的查抄,实现账号,密码的输入,并点击登录按钮,我这里就不多说了,有兴趣的大家可以去搞一下。我 xiao python爬虫,无非是因为写一些脚本,所以速度是优先考虑的,这个方法我就pass掉了。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值