对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中for语句简单遍历数据的方法
May 07 Python
Python使用chardet判断字符编码
May 09 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
Jul 27 Python
python Opencv将图片转为字符画
Feb 19 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 Python
Python 实现输入任意多个数,并计算其平均值的例子
Jul 16 Python
wxpython布局的实现方法
Nov 01 Python
在python shell中运行python文件的实现
Dec 21 Python
python图形界面开发之wxPython树控件使用方法详解
Feb 24 Python
详解Python yaml模块
Sep 23 Python
python实现批量提取指定文件夹下同类型文件
Apr 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
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
2020/08/03 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
微信小程序文章列表功能完整实例
2020/06/03 Javascript
php使用递归与迭代实现快速排序示例
2014/01/23 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
python基于openpyxl生成excel文件
2020/12/23 Python
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
纽约海:Sea New York
2018/11/04 全球购物
EJB面试题
2015/07/28 面试题
学校运动会开幕演讲稿
2014/01/04 职场文书
2014年大学生自我评价
2014/01/19 职场文书
两只小狮子教学反思
2014/02/05 职场文书
测试工程师职业规划书
2014/02/06 职场文书
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript