对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 相关文章推荐
操作Windows注册表的简单的Python程序制作教程
Apr 07 Python
用python找出那些被“标记”的照片
Apr 20 Python
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
windows环境下tensorflow安装过程详解
Mar 30 Python
python导入pandas具体步骤方法
Jun 23 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
pandas-resample按时间聚合实例
Dec 27 Python
pytorch中的inference使用实例
Feb 20 Python
python 按钮点击关闭窗口的实现
Mar 04 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
基于python实现百度语音识别和图灵对话
Nov 02 Python
Python实现科学占卜 让视频自动打码
Apr 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
PHP daddslashes 使用方法介绍
2012/10/26 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
基于jQuery图片平滑连续滚动插件
2009/04/27 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
2018/10/10 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
编写一个javascript元循环求值器的方法
2020/04/14 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
清洁工岗位职责
2014/01/29 职场文书
小学美术教学反思
2014/02/01 职场文书
护士毕业生自我鉴定
2014/02/08 职场文书
后备干部考察材料
2014/02/12 职场文书
网络技术专业求职信
2014/02/18 职场文书
班风口号
2014/06/18 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang