对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编写分析Python程序性能的工具的教程
Apr 01 Python
Python and、or以及and-or语法总结
Apr 14 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
tensorflow实现逻辑回归模型
Sep 08 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
Python中@property的理解和使用示例
Jun 11 Python
使用python 的matplotlib 画轨道实例
Jan 19 Python
python:批量统计xml中各类目标的数量案例
Mar 10 Python
python用什么编辑器进行项目开发
Jun 17 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 Python
python实战之90行代码写个猜数字游戏
Apr 22 Python
教你如何使用Python Tkinter库制作记事本
Jun 10 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
sphinx增量索引的一个问题
2011/06/14 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
2015/12/25 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
jquery一般方法介绍 入门参考
2011/06/21 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
JS与jQ读取xml文件的方法
2015/12/08 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
JS搜狐面试题分析
2016/12/16 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
python开启多个子进程并行运行的方法
2015/04/18 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
python如何从键盘获取输入实例
2020/06/18 Python
Django中使用Celery的方法步骤
2020/12/07 Python
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
创文明城市标语
2014/06/16 职场文书
安全目标责任书
2014/07/22 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
技术员岗位职责范本
2015/04/11 职场文书
欠款纠纷起诉状
2015/05/19 职场文书