美文网首页
python爬虫之为什么需要搭建cookie池

python爬虫之为什么需要搭建cookie池

作者: SunY7 | 来源:发表于2023-05-25 15:33 被阅读0次
00904-4113027398-_modelshoot style,a girl on the computer, (extremely detailed CG unity 8k wallpaper), full shot body photo of the most beautiful.png

在日常爬虫工作中,需要先进行账号登陆才能爬取的网站不少,很多时候,在没有登录的情况下,我们可以访问一部分页面或请求一些接口,因为毕竟网站本身需要做SEO,不会对所有页面都设置登录限制。但是,不登录直接爬取会有一些弊端,弊端主要有以下两点。

  1. 设置了登录限制的页面无法爬取。
    2.一些页面和接口虽然可以直接请求,但是请求一旦频繁,访问就容易被限制或者IP直接被封,,登陆后就好爬取了。
    所以这种情况下我们爬虫程序就需要要搭建cookies池,与IP代理池不同,Cookies池具有针对性,如果你爬微博就要构建一个微博cookies池,爬知乎就需要构建一个知乎cookies池;而IP代理池是通用的,可供不同的爬虫任务共同使用。
    本文我们以知乎来实现一个Cookies池的搭建过程。Cookies池中保存了许多知乎账号和登录后的Cookies信息,并且Cookies池还需要定时检测每个Cookies的有效性,如果某Cookies无效,那就删除该Cookies并模拟登录生成新的Cookies。同时Cookies池还需要一个非常重要的接口,即获取随机Cookies的接口,Cookies运行后,我们只需请求该接口,即可随机获得一个Cookies并用其爬取。cookie池的实现如下:

Redis数据库地址、端口、密码

REDIS_HOST = "localhost" # 注意本地就写字符串形式的"localhost"
REDIS_PORT = 6379
REDIS_PASSWORD = None # 密码没有的话,就写None

产生器使用的浏览器

BROSER_TYPE = "chrome" # 注意浏览器类型,是字符串形式的

产生器类,如扩展其他站点,请在此配置

GENERATOR_MAP = { # 注意字典后的类名也是字符串形式的
"https://www.zhihu.com/follow",
"zhihu":"ZhihuCookiesGenerator"
}

测试类,如扩展其他站点,请在此配置

TESTER_MAP ={
"weibo": "zhihuValidTester",
"zhihu": "zhihuValidTester"
# 'XXX':'XXXCookiesGenerator'
}

TESTER_URL_MAP = {
'weibo': 'www.zhihu.com/follow',
'zhihu': 'www.zhihu.com/follow'
}

产生器和验证器循环周期

CYCLE = 120

API地址和端口

API_HOST = '127.0.0.1' # host是字符串
API_PORT = 5000 # port不是字符串

产生器开关,模拟登录添加Cookies

GENERATOR_PROCESS = True

验证器开关,循环检测数据库中Cookies是否可用,不可用删除

TESTER_PROCESS = True

API接口服务

API_PROCESS = True
代理池的使用是做爬虫的基础技术,现在的爬虫代理有api提取和隧道转发2种方式,这里给大家分享下隧道转发的,供大家参考,代码示例由亿牛云爬虫代理专业提供:
#! -- encoding:utf-8 --

import requests
import random

# 要访问的目标页面
targetUrl = "www.zhihu.com/follow"

# 要访问的目标HTTPS页面
# targetUrl = "www.zhihu.com/follow"

# 代理服务器(产品官网 www.16yun.cn)
proxyHost = "t.16yun.cn"
proxyPort = "31111"

# 代理验证信息
proxyUser = "ERWERE"
proxyPass = "897857"

proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
    "host" : proxyHost,
    "port" : proxyPort,
    "user" : proxyUser,
    "pass" : proxyPass,
}

# 设置 http和https访问都是用HTTP代理
proxies = {
    "http"  : proxyMeta,
    "https" : proxyMeta,
}


#  设置IP切换头
tunnel = random.randint(1,10000)
headers = {"Proxy-Tunnel": str(tunnel)}



resp = requests.get(targetUrl, proxies=proxies, headers=headers)

print resp.status_code
print resp.text

相关文章

网友评论

      本文标题:python爬虫之为什么需要搭建cookie池

      本文链接:https://www.haomeiwen.com/subject/pryhedtx.html