scrapy selenium 登陆zhihu
# -*- coding: utf-8 -*- # 导入依赖包
import scrapy
from selenium import webdriver
import time
import json # 构建spider自动生成的基本配置
class ZhihuSpider(scrapy.Spider):
name = 'zhihu'
allowed_domains = ['www.zhihu.com']
start_urls = ['http://www.zhihu.com/'] # 模拟请求的headers,非常重要,不设置也可能知乎不让你访问请求
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0",
"HOST": "www.zhihu.com"
} # 第一步:使用selenium登录知乎并获取登录后的cookies,cookies没失效时,只要初次请求执行一次
def loginZhihu(self):
# 登录网址
loginurl='https://www.zhihu.com/signin'
# 加载webdriver驱动,用于获取登录页面标签属性
driver=webdriver.Chrome()
driver.get(loginurl) # 方式1 通过填充用户名和密码
# driver.find_element_by_name('username').clear() # 获取用户名框
# driver.find_element_by_name('username').send_keys(u'username') # 填充用户名
# driver.find_element_by_name('password').clear() # 获取密码框
# driver.find_element_by_name('password').send_keys(u'password') # 填充密码
# time.sleep(10) # 执行休眠10s等待浏览器的加载
# input("检查网页是否有验证码要输入,有就在网页输入验证码,输入完后在编辑器中回车;如果无验证码,则直接回车")
# 非常关键,有时候知乎会在输入密码后弹出验证码,这一步可将代码执行暂时停滞
# driver.find_element_by_css_selector("button[class='Button SignFlow-submitButton Button--primary Button--blue']").click() # 点击登录按钮 # 方式2 直接通过扫描二维码,如果不是要求全自动化,建议用这个,非常直接
# 毕竟我们这一步只是想保存登录后的cookies,至于用何种方式登录,可以不必过于计较
time.sleep(10) # 同样休眠10s等待页面
input("请页面二维码,并确认登录后,点击回车:") #点击二维码手机扫描登录
# 通过上述的方式实现登录后,其实我们的cookies在浏览器中已经有了,我们要做的就是获取
cookies = driver.get_cookies() # Selenium为我们提供了get_cookies来获取登录cookies
driver.close() # 获取cookies便可以关闭浏览器
# 然后的关键就是保存cookies,之后请求从文件中读取cookies就可以省去每次都要登录一次的
# 当然可以把cookies返回回去,但是之后的每次请求都要先执行一次login没有发挥cookies的作用
jsonCookies=json.dumps(cookies) # 通过json将cookies写入文件
with open('zhihuCookies.json','w') as f:
f.write(jsonCookies)
print(cookies)
# return cookies # Scrapy使用保存ookies请求发现模块,看是否是登录之后的状态
def question(self,response):
with open('zhihu_find.html','w',encoding='utf-8') as f:
f.write(response.text) #写入文件,保存成.html文件
pass def parse(self, response):
pass # scrapy请求的开始时start_request
def start_requests(self):
zhihu_findUrl = 'https://www.zhihu.com/explore'
self.loginZhihu() # 首次使用,先执行login,保存cookies之后便可以注释,
# 毕竟每次执行都要登录还是挺麻烦的,我们要充分利用cookies的作用
# 从文件中获取保存的cookies
with open('zhihuCookies.json','r',encoding='utf-8') as f:
listcookies=json.loads(f.read()) # 获取cookies
# 把获取的cookies处理成dict类型
cookies_dict = dict()
for cookie in listcookies:
# 在保存成dict时,我们其实只要cookies中的name和value,而domain等其他都可以不要
cookies_dict[cookie['name']] = cookie['value']
print(cookies_dict)
# Scrapy发起其他页面请求时,带上cookies=cookies_dict即可,同时记得带上header值,
yield scrapy.Request(url=zhihu_findUrl,cookies=cookies_dict,callback=self.question,headers=self.headers)
scrapy selenium 登陆zhihu的更多相关文章
- 知乎改版api接口之scrapy自动登陆
最近使用scrapy模拟登陆知乎,发现所有接口都发生变化了,包括验证码也发生了很大变化,通过抓包分析,记录下改版后的知乎模拟登陆,废话不多说,直接上代码,亲测有效 # -*- coding: utf- ...
- Scrapy 模拟登陆知乎--抓取热点话题
工具准备 在开始之前,请确保 scrpay 正确安装,手头有一款简洁而强大的浏览器, 若是你有使用 postman 那就更好了. Python 1 scrapy genspid ...
- 第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别
第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别 第一步.首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://gith ...
- Scrapy模拟登陆
1. 为什么需要模拟登陆? #获取cookie,能够爬取登陆后的页面 2. 回顾: requests是如何模拟登陆的? #1.直接携带cookies请求页面 #2.找接口发送post请求存储cooki ...
- 使用scrapy爬虫,爬取今日头条搜索吉林疫苗新闻(scrapy+selenium+PhantomJS)
这一阵子吉林疫苗案,备受大家关注,索性使用爬虫来爬取今日头条搜索吉林疫苗的新闻 依然使用三件套(scrapy+selenium+PhantomJS)来爬取新闻 以下是搜索页面,得到吉林疫苗的搜索信息, ...
- 使用scrapy爬虫,爬取今日头条首页推荐新闻(scrapy+selenium+PhantomJS)
爬取今日头条https://www.toutiao.com/首页推荐的新闻,打开网址得到如下界面 查看源代码你会发现 全是js代码,说明今日头条的内容是通过js动态生成的. 用火狐浏览器F12查看得知 ...
- Scrapy+selenium爬取简书全站
Scrapy+selenium爬取简书全站 环境 Ubuntu 18.04 Python 3.8 Scrapy 2.1 爬取内容 文字标题 作者 作者头像 发布日期 内容 文章连接 文章ID 思路 分 ...
- 爬虫入门之scrapy模拟登陆(十四)
注意:模拟登陆时,必须保证settings.py里的COOKIES_ENABLED(Cookies中间件) 处于开启状态 COOKIES_ENABLED = True或# COOKIES_ENABLE ...
- Python3 Scrapy + Selenium + 阿布云爬取拉钩网学习笔记
1 需求分析 想要一个能爬取拉钩网职位详情页的爬虫,来获取详情页内的公司名称.职位名称.薪资待遇.学历要求.岗位需求等信息.该爬虫能够通过配置搜索职位关键字和搜索城市来爬取不同城市的不同职位详情信息, ...
随机推荐
- IOP开发数据库--20180105整理
http://10.110.22.12/cloud-web/#/login/tenant 数据库 代理节点 10.110.22.12 数据库 10.110.22.12 dev/ro ...
- centos 下python升级
https://www.cnblogs.com/leon-zyl/p/8422699.html
- 如何更新clob类型的内容
一.手工测试流程: 1.测试需求(待执行用例) 2.标准化测试流程 1/5 --修改 result_info --用户风控信息表 select sysdate,t.*,t.rowid from fin ...
- iOS UI进阶-2.0 CALayer
在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图 ...
- iOSOpenDev安装使用
下载:http://iosopendev.com/download/ 选择“iOSOpenDev 1.6-2 Installer” 出错解决方法 https://www.jianshu.com/p/2 ...
- 增删改(DML)操作
增删改(DML)操作 1.1事务(transaction) 事务是数据库操作的最小单元,又ACID的特性,应该保证一个事务的sql语句要么同时成功,要么都不成功. Mybatis中配置了事务管理器,t ...
- php 数据库备份还原
public function exportDatabase(){ $data = input(); //备份数据库 $host="192.168.0.123"; $user=&q ...
- 笔记 : CSS3实现背景渐变过渡
使用CSS3的人都知道背景background-image是可以线性渐变(linear-gradient)和径向渐变(radial-gradient),但是想要做到过渡动画,单纯的background ...
- poj1741 树上的分治
题意是说给了n个点的树n<=10000,问有多少个点对例如(a,b)他们的之间的距离小于等于k 采用树的分治做 #include <iostream> #include <cs ...
- Permutation Bo (数学证明)
当在两端时:共有n * (n - 1)种组合,满足条件的有,计算可得, counter = n * (n - 1) / 2. 其他位置时:共有n * (n - 1) * (n - 2) 种组合,满足条 ...