对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实用日期时间处理方法汇总
May 09 Python
python生成式的send()方法(详解)
May 08 Python
Python 用Redis简单实现分布式爬虫的方法
Nov 23 Python
将字典转换为DataFrame并进行频次统计的方法
Apr 08 Python
python去除扩展名的实例讲解
Apr 23 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 Python
Django MEDIA的配置及用法详解
Jul 25 Python
基于Python实现大文件分割和命名脚本过程解析
Sep 29 Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 Python
Numpy中ndim、shape、dtype、astype的用法详解
Jun 14 Python
keras实现VGG16 CIFAR10数据集方式
Jul 07 Python
pytorch 预训练模型读取修改相关参数的填坑问题
Jun 05 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
php中autoload的用法总结
2013/11/08 PHP
php处理restful请求的路由类分享
2014/02/27 PHP
php使用codebase生成随机数
2014/03/25 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
2014/02/04 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
PHP7新特性简述
2017/06/11 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
了解JavaScript中的选择器
2019/05/24 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
python 数据加密代码
2008/12/24 Python
Python实现的石头剪子布代码分享
2014/08/22 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
html5 div布局与table布局详解
2016/11/16 HTML / CSS
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
初三物理教学反思
2014/01/21 职场文书
大学生新学期计划书
2014/04/28 职场文书
医院护士见习期自我鉴定
2014/09/15 职场文书
员工工作心得体会
2019/05/07 职场文书
JavaScript异步操作中串行和并行
2021/11/20 Javascript
muduo TcpServer模块源码分析
2022/04/26 Redis
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android