对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 17 Python
Python中DJANGO简单测试实例
May 11 Python
python集合用法实例分析
May 30 Python
Python 序列的方法总结
Oct 18 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
基于python实现百度翻译功能
May 09 Python
Django实现发送邮件功能
Jul 18 Python
用Python写一个自动木马程序
Sep 17 Python
Python龙贝格法求积分实例
Feb 29 Python
python文件编写好后如何实践
Jul 07 Python
Python实现我的世界小游戏源代码
Mar 02 Python
python中pymysql包操作数据库方法
Apr 19 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
简单易用的计数器(数据库)
2006/10/09 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
php更新修改excel中的内容实例代码
2014/02/26 PHP
学习php中的正则表达式
2014/08/17 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
2015/09/29 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
js中的this关键字详解
2013/09/25 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
使用jquery实现放大镜效果
2014/09/02 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
2019/06/17 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
Python3 main函数使用sys.argv传入多个参数的实现
2019/12/25 Python
python爬虫容易学吗
2020/06/02 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
巴西宠物商店:Cobasi
2019/04/19 全球购物
中文专业毕业生自荐书范文
2014/01/04 职场文书
2014年道德讲堂实施方案
2014/03/05 职场文书
材料会计岗位职责
2014/03/06 职场文书
有趣的广告词
2014/03/18 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技