对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实现每次处理一个字符的三种方法
Oct 09 Python
Python使用matplotlib绘制动画的方法
May 20 Python
Django的信号机制详解
May 05 Python
python书籍信息爬虫实例
Mar 19 Python
Python装饰器原理与用法分析
Apr 30 Python
python 每天如何定时启动爬虫任务(实现方法分享)
May 21 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
Aug 07 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 Python
python BeautifulSoup库的安装与使用
Dec 17 Python
深入理解python多线程编程
Apr 18 Python
在Python中如何使用yield
Jun 07 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
B2K与车机的中波PK
2021/03/02 无线电
如何隐藏你的.php文件
2007/01/04 PHP
PHP Class&Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
JavaScript实现左右滚动电影画布
2020/02/06 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
Python3 queue队列模块详细介绍
2018/01/05 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
python实现复制大量文件功能
2019/08/31 Python
Python Selenium截图功能实现代码
2020/04/26 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
学前教育教师求职自荐信
2013/09/22 职场文书
房地产销售计划书
2014/01/10 职场文书
副董事长岗位职责
2014/04/02 职场文书
个人股份合作协议书
2014/10/24 职场文书
老龙头导游词
2015/02/11 职场文书
聘任书格式及范文
2015/09/21 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
一文搞懂redux在react中的初步用法
2021/06/09 Javascript