Python爬虫 —— 知乎之selenium模拟登陆获取cookies+requests.Session()访问+session序列化
代码如下:
# coding:utf-8
from selenium import webdriver
import requests
import sys
import time
from lxml import etree
import cPickle
import os
# reload(sys)
# sys.setdefaultencoding('utf-8') class Zhihu:
def __init__(self,homeurl):
self.homeurl = homeurl def save_session(self,session): #保存session,下次可直接使用,避免再次登录
with open('session.txt','wb') as f:
cPickle.dump(session, f)
print "Cookies have been writed." def load_session(self): #加载session
with open('session.txt', 'rb') as f:
s = cPickle.load(f)
return s def GetCookies(self): #初次登录用selenium模拟,并获得cookies
browser = webdriver.Chrome()
browser.get("https://www.zhihu.com/signin")
browser.find_element_by_xpath("//main//div[2]/div[1]/form/div[1]/div[2]/div[1]/input").send_keys("")
browser.find_element_by_xpath("//main//div[2]/div[1]/form/div[2]/div/div[1]/input").send_keys("xxxxxx")
browser.find_element_by_xpath("//main//div[2]/div[1]/form/button").click()
time.sleep(10)
cookies = browser.get_cookies()
browser.quit()
return cookies def get_session(self): #获取session
s = requests.Session()
if not os.path.exists('session.txt'): #如果没有session,则创建一个,并且保存到文件中
s.headers.clear()
for cookie in self.GetCookies():
s.cookies.set(cookie['name'], cookie['value'])
self.save_session(s)
else: #如果已存在session,则直接加载使用
s = self.load_session()
return s def Crawl(self): #开始爬取
s = self.get_session()
html = s.get(self.homeurl).text
html_tree = etree.HTML(html)
items = html_tree.xpath('//main//div[1]/div[2]//div[@class="ContentItem AnswerItem"]/@data-zop')
for item in items:
content = eval(item)
authorName = content['authorName']
title = content['title']
print authorName + "回答了:" + title zhihu = Zhihu('https://www.zhihu.com/')
zhihu.Crawl()
Python爬虫 —— 知乎之selenium模拟登陆获取cookies+requests.Session()访问+session序列化的更多相关文章
- selenium 模拟登陆豆瓣,爬取武林外传的短评
selenium 模拟登陆豆瓣,爬去武林外传的短评: 在最开始写爬虫的时候,抓取豆瓣评论,我们从F12里面是可以直接发现接口的,但是最近豆瓣更新,数据是JS异步加载的,所以没有找到合适的方法爬去,于是 ...
- python爬虫知乎问答
python爬虫知乎问答 import cookielibimport base64import reimport hashlibimport jsonimport rsaimport binasci ...
- Selenium模拟登陆百度贴吧
Selenium模拟登陆百度贴吧 from selenium import webdriver from time import sleep from selenium.webdriver.commo ...
- from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)
使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...
- 用Python爬虫爬取广州大学教务系统的成绩(内网访问)
用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code ...
- python selenium模拟登陆163邮箱。
selenium是可以模拟浏览器操作. 有些爬虫是异步加载的,通过爬取网页源码是得不到需要的内容.所以可以模拟浏览器去登陆该网站进行爬取操作. 需要安装selenium通过pip install xx ...
- 使用selenium模拟登陆淘宝、新浪和知乎
如果直接使用selenium访问淘宝.新浪和知乎这些网址.一般会识别出这是自动化测试工具,会有反制措施.当开启开发者模式后,就可以绕过他们的检测啦.(不行的,哭笑) 如果网站只是对windows.na ...
- Python爬虫初学(三)—— 模拟登录知乎
模拟登录知乎 这几天在研究模拟登录, 以知乎 - 与世界分享你的知识.经验和见解为例.实现过程遇到不少疑问,借鉴了知乎xchaoinfo的代码,万分感激! 知乎登录分为邮箱登录和手机登录两种方式,通过 ...
- 使用python - selenium模拟登陆b站
思路 输入用户名密码点击登陆 获取验证码的原始图片与有缺口的图片 找出两张图片的缺口起始处 拖动碎片 功能代码段 # 使用到的库 from selenium import webdriver from ...
随机推荐
- NYOJ92 图像实用区域 【BFS】
碰到了一个曾经从未见过的奇怪问题:先上截图: 执行号 用户 题目 结果 时间 内存 语言 提交时间 895360 userid=%E9%95%BF%E6%9C%A8" style=" ...
- Android使用OKHttp3实现下载(断点续传、显示运行进度)
OKHttp3是现在很流行的Android网络请求框架,那么怎样利用Android实现断点续传呢,今天写了个Demo尝试了一下,感觉还是有点意思 准备阶段 我们会用到OKHttp3来做网络请求,使用R ...
- JVM内存最大能调多大分析【经典】
http://hi.baidu.com/suofang/blog/item/49c637c71c0afbd0d1006028.html 上次用weblogic 把 -XmxXXXX 设成2G, ...
- 可以添加自定义的Select控件
1.控件dom <select name="WebSiteTarget" id="WebSiteTarget" class="w1" ...
- JVM学习02-GC算法与种类
1. GC 简单介绍 GC(Garbage Collection) 是垃圾收集的简写,GC机制是java中一个比較重要的概念.java的内存管理提供了内存的分配和释放.内存处理是程序编写人员非常eas ...
- matlab2016b-linux版本在ubutu16.04x64上面不能打开摄像头的处理方法
this can not work. need find other way. ================================================== ...
- wifi认证Portal开发系列(三):portal协议
中国移动WLAN业务PORTAL协议规范介绍 一.用户上线认证流程 上线流程完成用户账号的认证,并把认证结果通知Portal Server,Portal server将会通知WLAN用户并且显示相应的 ...
- servletResponse 请求重定向
package response;/* * 重定向特点: * 1,浏览器会向服务器发送两次请求,意味着就有两个request\response * 2,用重定向技术,浏览器地址栏会发生变化 * * ...
- MySQL的几种登陆方式
MySQL的几种登陆方式 登录方式一: [root@001 tmp]# mysql -h 127.0.0.1 -u root -p 这是最标准的登录方式,意指通过tTCP/IP协议进行连接,因为 ...
- Net中的代码规范工具及使用
Net中的代码规范工具及使用 https://www.cnblogs.com/selimsong/p/9209254.html 上一篇文章介绍了编码标准中一些常用的工具,本篇就具体来介绍如何使用它们来 ...