对python抓取需要登录网站数据的方法详解


Posted in Python onMay 21, 2018

scrapy.FormRequest

login.py

class LoginSpider(scrapy.Spider):
 name = 'login_spider'
 start_urls = ['http://www.login.com']
 def parse(self, response):
  return [
   scrapy.FormRequest.from_response(
     response,
     # username和password要根据实际页面的表单的name字段进行修改
     formdata={'username': 'your_username', 'password': 'your_password'},
     callback=self.after_login)]
 def after_login(self, response):
  # 登录后的代码
  pass

selenium登录获取cookie

get_cookie_by_selenium.py

import pickle
import time
from selenium import webdriver
def get_cookies():
 url = 'https://www.test.com'
 web_driver = webdriver.Chrome()
 web_driver.get(url)
 username = web_driver.find_element_by_id('login-email')
 username.send_keys('username')
 password = web_driver.find_element_by_id('login-password')
 password.send_keys('password')
 login_button = web_driver.find_element_by_id('login-submit')
 login_button.click()
 time.sleep(3)
 cookies = web_driver.get_cookies()
 web_driver.close()
 return cookies
if __name__ == '__main__':
 cookies = get_cookies()
 pickle.dump(cookies, open('cookies.pkl', 'wb'))

获取浏览器cookie(以Ubuntu的Firefox为例)

get_cookie_by_firefox.py

import sqlite3
import pickle
def get_cookie_by_firefox():
 cookie_path = '/home/name/.mozilla/firefox/bqtvfe08.default/cookies.sqlite'
 with sqlite3.connect(cookie_path) as conn:
  sql = 'select name,value from moz_cookies where baseDomain="test.com"'
  cur = conn.cursor()
  cookies = [{'name': name, 'value': value} for name, value in cur.execute(sql).fetchall()]
  return cookies
if __name__ == '__main__':
 cookies = get_cookie_from_firefox()
 pickle.dump(cookies, open('cookies.pkl', 'wb'))

scrapy使用获取后的cookie

cookies = pickle.load(open('cookies.pkl', 'rb'))
yield scrapy.Request(url, cookies=cookies, callback=self.parse)

requests使用获取后的cookie

cookies = pickle.load(open('cookies.pkl', 'rb'))
s = requests.Session()
for cookie in cookies:
 s.cookies.set(cookie['name'], cookie['value'])

selenium使用获取后的cookie

from selenium import webdriver
cookies = pickle.load(open('cookies.pkl', 'rb'))
w = webdriver.Chrome()
# 直接添加cookie会报错,下面是一种解决方案,可能有更好的
# -- start --
w.get('http://www.test.com')
w.delete_all_cookies()
# -- end --
for cookie in cookies:
 w.add_cookie(cookie)

以上这篇对python抓取需要登录网站数据的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python的web框架中中编写日志列表的教程
Apr 30 Python
Python工程师面试题 与Python Web相关
Jan 14 Python
Python+Selenium自动化实现分页(pagination)处理
Mar 31 Python
解决phantomjs截图失败,phantom.exit位置的问题
May 17 Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 Python
Python中print和return的作用及区别解析
May 05 Python
python+opencv像素的加减和加权操作的实现
Jul 14 Python
Python selenium页面加载慢超时的解决方案
Mar 18 Python
python with语句的原理与用法详解
Mar 30 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
Jun 08 Python
详解用Python爬虫获取百度企业信用中企业基本信息
Jul 02 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
深入浅析python 中的匿名函数
May 21 #Python
python3 selenium 切换窗口的几种方法小结
May 21 #Python
python selenium 对浏览器标签页进行关闭和切换的方法
May 21 #Python
pytorch cnn 识别手写的字实现自建图片数据
May 20 #Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 #Python
Python安装lz4-0.10.1遇到的坑
May 20 #Python
Python requests发送post请求的一些疑点
May 20 #Python
You might like
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
python实现维吉尼亚算法
2019/03/20 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
最热门的自我评价
2013/12/30 职场文书
护理职业生涯规划书
2014/01/24 职场文书
倡议书格式范文
2014/04/14 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python