对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的另外几种语言实现
Jan 29 Python
Python实现简单的文件传输与MySQL备份的脚本分享
Jan 03 Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 Python
Python下使用Scrapy爬取网页内容的实例
May 21 Python
Python编程在flask中模拟进行Restful的CRUD操作
Dec 28 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
Python对HTML转义字符进行反转义的实现方法
Apr 28 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
Aug 23 Python
python加载自定义词典实例
Dec 06 Python
python重要函数eval多种用法解析
Jan 14 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 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
Sony CFR 320 修复改造
2020/03/14 无线电
php引用传值实例详解学习
2013/11/06 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
PNG背景在不同浏览器下的应用
2009/06/22 Javascript
学习JS面向对象成果 借国庆发布个最新作品与大家交流
2009/10/03 Javascript
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
javascript中的正则表达式使用详解
2015/08/30 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
python命令行参数用法实例分析
2019/06/25 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
python3 实现调用串口功能
2019/12/26 Python
python3将变量输入的简单实例
2020/08/19 Python
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
小学教育见习报告
2014/10/31 职场文书
补充协议书
2015/01/28 职场文书
个人工作表现自我评价
2015/03/06 职场文书
孔繁森观后感
2015/06/10 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书