对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 相关文章推荐
Python3中详解fabfile的编写
Jun 24 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
Jul 02 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
Jul 30 Python
Python使用sort和class实现的多级排序功能示例
Aug 15 Python
Python GUI布局尺寸适配方法
Oct 11 Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 Python
Python功能点实现:函数级/代码块级计时器
Jan 02 Python
Python 常用模块 re 使用方法详解
Jun 06 Python
pytorch ImageFolder的覆写实例
Feb 20 Python
Django封装交互接口代码
Jul 12 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
Jul 21 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 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
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
PHP 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
php开启openssl的方法
2014/05/15 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
PHP基本语法实例总结
2016/09/09 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
python pickle 和 shelve模块的用法
2013/09/16 Python
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
python实现简单的文字识别
2018/11/27 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
加热夹克:RAVEAN
2018/10/19 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
离婚协议书包括哪些内容
2014/10/16 职场文书
大学生见习总结报告
2015/06/24 职场文书
《静夜思》教学反思
2016/02/17 职场文书
Django与数据库交互的实现
2021/06/03 Python
CSS3实现指纹特效代码
2022/03/17 HTML / CSS