1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 躲在被窝里偷偷学爬虫(6)---处理cookie模拟登录及代理IP

躲在被窝里偷偷学爬虫(6)---处理cookie模拟登录及代理IP

时间:2022-03-27 22:02:48

相关推荐

躲在被窝里偷偷学爬虫(6)---处理cookie模拟登录及代理IP

一,处理cookie模拟进行模拟登录

前面小编进行爬取的都是没设登录的网站,那么像QQ空间,17k小说网等众多网站,不先进行登录将无法进入个人主页的网站,是不是爬虫就束手无策了呢?

答案肯定是否定的,下面就来用代码模拟登录!!!

1,何为cookie?

cookie是储存在客户端的一组键值对。如下图QQ空间的cookie

2,cookie和爬虫之间有何关联?

sometimes,对一张网页进行请求时,假如要是在请求过程中不携带cookie值的话,那么我们将无法请求到页面正确的数据。

therefore,cookie是爬虫中一个常见且典型的反爬机制

3,17k小说网例子

拿取登录对应的url地址(/ck/user/login)

# !/usr/bin/env python# -*- coding:utf-8 -*-# @Author:HePengLi# @Time:-03-27import requests# 创建一个session对象session = requests.Session()url1 = '/ck/user/login'headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.54"}data = {'loginName': '15029494474', # 这里填写账号'password': 'woshinidaye' # 这里填写密码}# 进行登录res = session.post(url=url1, headers=headers, data=data)print(res)<Response [200]>

返回200即说明模拟登录成功!

接下来拿取小编书架中收藏的书的基本信息,如下图

因为这些是动态加载的内容,所以去检查中在Network中,选中XHR,按f5刷新页面找到如下图包打开,并复制Headers中的url地址

仔细观察要的页面内容全在这里

import requestsimport json# 创建一个session对象session = requests.Session()url1 = '/ck/user/login'headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.54"}data = {'loginName': '15029494474','password': 'woshinidaye'}# 进行登录res = session.post(url=url1, headers=headers, data=data)# print(res)# 拿取我的书架上的书url2 = '/ck/author/shelf?page=1&appKey=2406394919'resp = requests.get(url=url2, headers=headers).textprint(resp){"status":{"code":10103,"msg":"用户登陆信息错误"},"time":1616827996000}

报错了,说明当我去拿页面内容时,如果没携带cookie,网站就觉得咱们没登录

# 拿取我的书架上的书url2 = '/ck/author/shelf?page=1&appKey=2406394919'resp = session.get(url=url2, headers=headers).textprint(resp)

解析内容并持续化保存到本地

# !/usr/bin/env python# -*- coding:utf-8 -*-# @Author:HePengLi# @Time:-03-27import requestsimport json# 创建一个session对象session = requests.Session()url1 = '/ck/user/login'headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.54"}data = {'loginName': '15029494474','password': 'woshinidaye'}# 进行登录res = session.post(url=url1, headers=headers, data=data)# print(res)# 拿取我的书架上的书url2 = '/ck/author/shelf?page=1&appKey=2406394919'resp = session.get(url=url2, headers=headers).text# print(resp)# 把json字符串转换成python可交互的数据类型字典resp_data = json.loads(resp)data_list = resp_data['data']# print(data_list)f = open('./17k.txt', 'w', encoding='utf-8')for data in data_list:# 书的类型category = data['bookCategory']['name']# 书名title = data['bookName']# 最近更新时间chapter = data['lastUpdateChapter']['name']# 作者author = data['authorPenName']# print(category, title, chapter, author)# 简单进行数据格式处理content = '类型:' + category + " , " + '书名:' + title + " , " + '最新更新章节:' + chapter + " , " + '作者:' + author + '\n\n'f.write(content)print('over!!!')

二,使用代理IP

1,何为代理IP?

五个字,就是代理服务器

2,请问要她有什么鸟用?

用来转发请求和响应

3,请问在爬虫中为何要用他?

假如在爬虫中短时间内对某个服务器发起了高频率的请求,则服务器会检测到这种异常,进而会暂时封掉我们的IP地址,使在封的时间段内无法再访问服务器。因此,就要使用代理IP进行操作,使用代理IP后,服务器接收到请求的对应IP就是代理服务器的,而并非我们真正客户端的!

4,代理服务器的几种匿名度

①透明代理:就字面意思,也能猜到八九不离十.。使用此种代理,服务器知道你使用了代理,也知道你的真实IP。

②匿名代理:使用此种代理,服务器知道你使用了代理,但是不知道你真实的IP。

③高匿代理:使用此种代理,服务器不知道你使用了代理,也不知道你的真实IP。

5,小编推荐的代理(智连HTTP)

URL地址:/

免费的代理实在是能把人心态玩崩,所以小编选择卖肾续费版的,如下图

练习使用一天3元人民币。小编尽管家徒四壁,但也能勉强接受!

购买完成后我们点击API提取,如下图

据小编体验,有效1~5分钟的IP实际有效时间只有两分钟左右

6,编写代码拿到代理的IP地址

# !/usr/bin/env python# -*- coding:utf-8 -*-# @Author:HePengLi# @Time:-03-27import requestsfrom lxml import etreeurl = '/index.php/api/entry?method=proxyServer.generate_api_url&packid=1&fa=0&fetch_key=&groupid=0&qty=5&time=1&pro=&city=&port=1&format=html&ss=5&css=&dt=1&specialTxt=3&specialJson=&usertype=15'page_content = requests.get(url).texttree = etree.HTML(page_content)all_ip = tree.xpath('//body//text()')https_ip = []for ip in all_ip:dic = {'https': ip}https_ip.append(dic)print(https_ip)[{'https': '123.73.63.67:46603'}, {'https': '220.161.32.108:45111'}, {'https': '183.159.83.169:45112'}, {'https': '222.37.78.253:32223'}, {'https': '114.99.11.51:23890'}]

7,让某个网站封掉我的ip

这个最好玩了,哈哈哈!看客朋友们千万不要学小编奥,我只为做个实例

对快代理(/free/inha)发起高频请求,使其封掉我的本机IP

import requestsfrom lxml import etreeurl = '/free/inha/%s/'headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.54"}all_ip = []for i in range(1,100):page_url = url % ipage_content = requests.get(url=page_url, headers=headers).texttree = etree.HTML(page_content)ip = tree.xpath('//*[@id="list"]/table')for d in ip:page = d.xpath('./tbody/tr/td[1]/text()')# print(one)for d in page:all_ip.append(d)print(len(all_ip))

只撸了一下,就被封了,这也太配合了吧(再去刷新页面),如下图

8,上代理ip

# !/usr/bin/env python# -*- coding:utf-8 -*-# @Author:HePengLi# @Time:-03-27import requestsfrom lxml import etreeimport random# 代理对应的代码url = '/index.php/api/entry?method=proxyServer.generate_api_url&packid=1&fa=0&fetch_key=&groupid=0&qty=5&time=1&pro=&city=&port=1&format=html&ss=5&css=&dt=1&specialTxt=3&specialJson=&usertype=15'page_content = requests.get(url).texttree = etree.HTML(page_content)all_ip = tree.xpath('//body//text()')https_ip = []for ip in all_ip:dic = {'https': ip}https_ip.append(dic)# print(https_ip)# 用代理再次发起请求url = '/free/inha/%s/'headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.54"}all_ip = []for i in range(1,2):page_url = url % i# 加入代理IPpage_content = requests.get(url=page_url, headers=headers, proxies=random.choice(https_ip)).texttree = etree.HTML(page_content)ip = tree.xpath('//*[@id="list"]/table')for d in ip:page = d.xpath('./tbody/tr/td[1]/text()')for d in page:all_ip.append(d)print(len(all_ip))

回头再去刷新页面,依然无法访问,说明代理起作用了!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。