几点要素:

  1. 搭建之前需要一些微博账号,这里使用接码平台自行注册。
  2. 使用Redis数据库进行账号信息的存储与读取
  3. 配置好webdriver Chrome的浏览器插件

开始搭建

1.存储模块的搭建:
需要存储的内容无非就是账号,密码,cookies这三样。
cookies可以存为json字符串格式在redis里,我们需要将cookies和账号对应,以及账号和密码的对应,所以在redis中我们将这两种映射存为hash结构。


hash的key是账号,value是密码
这里考虑到可扩展性,将账户和cookies的映射做了2级分类,即account:weibo,若用于例如知乎的cookies存储可改添加account:zhihu等。
创建存储模块

import random
import redisclass Redisclient():def __init__(self,type,website,host='192.168.37.38',port='6379'):self.db=redis.StrictRedis(host=host,port=port,password='',decode_responses=True)self.type=typeself.website=websitedef name(self):return '{}:{}'.format(self.type,self.website)def set(self,username,value):return self.db.hset(self.name(),username,value)def get(self,username):return self.db.hget(self.name(),username)#根据key名获取valuedef delete(self,username):return self.db.hdel(self.name(),username)def count(self):return self.db.hlen(self.name())def random(self):#随机获取一条value数据return random.choice(self.db.hvals(self.name()))def username(self):#获取所有用户名keyreturn self.db.hkeys(self.name())def all(self):#获取所有key value键值对return self.db.hgetall(self.name())

这里创造了一个redis数据库类,构造了初始化函数,用来传递存储类别(account还是cookies),以及网站类别,端口等。
然后将数据库的读取进行了封装。

2.账号入库

from cunchu import Redisclientclass zhanghaoruku():def duquzhanghao(self):f=open('zhanghao.txt','r',encoding='utf-8')lines=f.readlines()for line in lines:line.replace('\n','')      username=line.split('----')[0]password=line.split('----')[1]yield username,passworddef ruku(self):db=Redisclient('account','weibo')shuju=self.duquzhanghao()for u,p in shuju:print(f'正在存储账号:{u},密码:{p}')db.set(u,p)
if __name__ == '__main__':start=zhanghaoruku()start.ruku()

这一步就是读取txt文件里的账号存入数据库

3.cookies生成模块的搭建

from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from cunchu import Redisclient
import jsonclass new_cookies(): def __init__(self):self.account_db=Redisclient('account','weibo')self.cookies_db=Redisclient('cookies','weibo')def duquzhanghao(self):users=self.account_db.username()for user in users:yield userdef baocun(self,username,cookies):self.cookies_db.set(username,json.dumps(cookies))def n_cookies(self, username):uuser=usernamepas=self.account_db.get(uuser)driver=webdriver.Chrome()driver.delete_all_cookies()time.sleep(1)driver.get('https://weibo.com/')WebDriverWait(driver,20,0.5).until(EC.visibility_of_element_located((By.ID,'loginname'))).send_keys(uuser)driver.find_element_by_name('password').send_keys(pas)driver.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[6]/a/span').click()time.sleep(1)driver.find_element_by_name('verifycode').click()WebDriverWait(driver,100,0.5).until(EC.visibility_of_element_located((By.CLASS_NAME,'B_index')))#这里为登录后页面,等待定位到新页面的独有class判定登录完成,然后进行下一步cookies的获取cookies = driver.get_cookies()self.baocun(uuser,cookies)     driver.close()def main(self):duqu=self.duquzhanghao()for x in duqu:print(x)if not x in self.cookies_db.username():print(f'正在生成cookies...用户名为:{x}')self.n_cookies(x)
if __name__ == '__main__':start=new_cookies()start.main()

这里我们创造了一个获取cookies的类,初始化连接两类数据库的方法。
首先从account数据库中获取账号,和cookies数据库中数据最对比,如果不在cookies数据库中即进行cookies的获取。
由于微博登录验证经常改变,一会滑块一会点击验证码,所以这里在验证模块时手动。

4.验证模块

import json
import requests
from cunchu import Redisclient
from requests.exceptions import ConnectionError
class tester():def __init__(self,website):self.website=websiteself.cookies_db=Redisclient('cookies',self.website)self.account_db=Redisclient('account',self.website)def test(self):raise NotImplementedError#要求其子类一定要实现,不实现的时候会导致问题,采用raise的方式def run(self):cookies_group=self.cookies_db.all()for username, cookies in cookies_group.items():self.test(username,cookies)class Weibotester(tester):def __init__(self,website='weibo'):tester.__init__(self,website)#由于重写了初始函数,这里继承父类的初始函数def test(self,username,cookies):print('正在测试Cookies','用户名',username)try:coo_dict={}cookies=json.loads(cookies)#对cookies格式进行处理,以便request.get()的使用for coo in cookies:coo_dict[coo['name']]=coo['value']except TypeError:print('Cookies不合法',username)self.cookies_db.delete(username)print('删除Cookies', username)try:test_url='https://weibo.com/p/1005055091382550/follow?relate=fans&from=100505&wvr=6&mod=headfans&current=fans#place'#此url为登陆后才能访问的页面,使用allow_redirects=False可以强制不301跳转到登录页面response=requests.get(test_url,cookies=coo_dict,allow_redirects=False)if response.status_code==200:print('Cookies有效',username,'\n-----------------------\n')else:print(response.status_code, response.headers)print('Cookies失效', username)shanfou=input('是否删除该cookies?输入回车删除,输入n 不删除')     #想删就删不想删就留着if shanfou=='':self.cookies_db.delete(username)print('删除Cookies', username)else:print('没有删除该cookies')except ConnectionError as e:print('发生异常', e.args)if __name__ == '__main__':Weibotester().run()

考虑到模块的可扩展性,这里写了一个子类weibotester继承父类tester。

搭建微博Cookies池(一)相关推荐

  1. Python3网络爬虫开发实战,Cookies 池的搭建,破解反爬虫!

    很多时候,在爬取没有登录的情况下,我们也可以访问一部分页面或请求一些接口,因为毕竟网站本身需要做 SEO,不会对所有页面都设置登录限制. 很多人学习python,不知道从何学起. 很多人学习pytho ...

  2. 妈妈再也不用担心爬虫被封号了!手把手教你搭建Cookies池

    2019独角兽企业重金招聘Python工程师标准>>> 很多时候,在爬取没有登录的情况下,我们也可以访问一部分页面或请求一些接口,因为毕竟网站本身需要做SEO,不会对所有页面都设置登 ...

  3. 爬取网站总是被封?大神教你搭建Cookies池,以后远离IP被封

    摘要 本文作者:崔庆才 GitHub地址:https://github.com/Python3WebSpider/CookiesPool 小编推荐一本崔大大写的网络爬虫的书籍<Python3网络 ...

  4. python爬虫-搭建cookies池

    写在前面 前段时间跟着静觅大神学习了自建ip代理池, 但是很多情况下,页面的某些信息需要登录才能查看. 所以,今天又和大神学习了cookies池的搭建. 整体思路 Cookies池的架构和代理池类似, ...

  5. python cookie池_Python爬虫scrapy框架Cookie池(微博Cookie池)的使用

    下载代码Cookie池(这里主要是微博登录,也可以自己配置置其他的站点网址) 下载代码GitHub:https://github.com/Python3WebSpider/CookiesPool 下载 ...

  6. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(四) —— 应对反爬技术(选取 User-Agent、添加 IP代理池以及Cookies池 )

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) -- 数据的持久化--使用MongoDB存储爬取的数据 最近项目有些忙,很多需求紧急上线,所以一直没能完善< 使用 ...

  7. 手把手教你用Python搭建IP代理池,轻松破解请求频率限制反爬虫~

    我们所写的爬虫,它对服务器发出的网络请求频率要比正常用户的高的多,从而开发者可以将请求频率过高的用户视为爬虫程序,从而来限制爬虫程序. 今天志斌就来给大家分享一下,如何用Python搭建一个IP代理池 ...

  8. 如何搭建动态IP池?手把手教你3种方法!

    动态IP是什么?在当今互联网中,人人都需要访问网络来获取资讯解决工作和学习生活的需求,而网络中的黑客也越来越多,稍不留意就会在网络中留下自己的痕迹.在这种情况下,动态IP的使用就非常有必要了. 另外很 ...

  9. Python搭建代理IP池(一)- 获取 IP

    使用爬虫时,大部分网站都有一定的反爬措施,有些网站会限制每个 IP 的访问速度或访问次数,超出了它的限制你的 IP 就会被封掉.对于访问速度的处理比较简单,只要间隔一段时间爬取一次就行了,避免频繁访问 ...

最新文章

  1. 一场由FPGA触发的芯片战争
  2. 临危不乱,.Net+IIS环境经常出现的问题及排障。(转)
  3. hdu 6406(思路+数据结构)
  4. Angular rxjs里自定义operator的使用
  5. eShopOnContainers 是一个基于微服务的.NET Core示例框架
  6. linux 开机默认启动windows系统时间,Windows和Linux双系统批改默认启动项、超时时间...
  7. JSP标签JSTL(3)--迭代操作
  8. c语言学生成绩管理系统总结
  9. 2020年中国旅游行业网络关注度分析报告
  10. SQL Server 触发器
  11. 使用Spark MLlib进行情感分析
  12. 【Algorithm】GPLT L3-014 球队“食物链”
  13. 生物信息学在感染和疫苗研究中的应用
  14. 阿里云DataWorks介绍
  15. 剧场版复活的f 剧情
  16. 计算机模拟触摸屏,西门子人机界面(触摸屏HMI)与虚拟仿真应用技术
  17. 程序员转行能做什么?
  18. 区块链、通证与供应链风险管理适应性分析研究
  19. 小孔成像总结_初中物理知识点总结+解题技巧+方法总结全汇总
  20. 本乃后山人,欲做堂前客。

热门文章

  1. 实用计算机快捷键,超实用常见电脑快捷键操作大全
  2. ant-design-vue 确定 和取消 对应的代码
  3. ubuntu 安装中文输入法
  4. 网络入侵敲响警钟,数据安全不容忽视!
  5. 报告 :一文解读微信小程序用户行为
  6. 基于GRASP原则的设计模式
  7. Vue-ElementUI el-table表格中根据后端获取的0、1、2显式对应性别中文(未知、男、女)
  8. mongo集群——副本集模式
  9. 智慧医疗app使用手册(Intelligent medical treatment)
  10. 深度学习yolov3 裂痕检测和手势识别教程 小白学习笔记