对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抓取电影天堂电影信息的代码
Apr 07 Python
Python中绑定与未绑定的类方法用法分析
Apr 29 Python
Python打包可执行文件的方法详解
Sep 19 Python
基于python(urlparse)模板的使用方法总结
Oct 13 Python
使用Python处理BAM的方法
Sep 28 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
wxPython实现列表增删改查功能
Nov 19 Python
python微信公众号开发简单流程实现
Mar 09 Python
pycharm激活码快速激活及使用步骤
Mar 12 Python
配置python的编程环境之Anaconda + VSCode的教程
Mar 29 Python
浅谈python3打包与拆包在函数的应用详解
May 02 Python
Python matplotlib可视化之绘制韦恩图
Feb 24 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
4.与数据库的连接
2006/10/09 PHP
用PHP连接MySQL代码的参数说明
2008/06/07 PHP
学习php开源项目的源码指南
2014/12/21 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
jquery 表单取值常用代码
2009/12/22 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
Python3中多线程编程的队列运作示例
2015/04/16 Python
在 Python 应用中使用 MongoDB的方法
2017/01/05 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
Python实现随机创建电话号码的方法示例
2018/12/07 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
Shell脚本如何向终端输出信息
2014/04/25 面试题
房地产管理毕业生自荐信
2013/11/04 职场文书
教师节简报
2015/07/20 职场文书
聘任通知书
2015/09/21 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript