python 爬虫登录保存会话去获取只有登录能获取的数据
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# import ConfigParser import datetime
import sys
import requests
from requests.cookies import RequestsCookieJar
from bs4 import BeautifulSoup
import log_config
import time
import random
import re def is_form_hash(tag):
return tag.has_attr('name') and tag.get('name') == 'formhash' def is_refer(tag):
return tag.has_attr('name') and tag.get('name') == 'referer' class haifeng_crawler: def __init__(self, user_name, pass_word):
self.cookies = dict()
self.username = user_name
self.password = pass_word
self.session = requests.session() def update_cookies(self, new_cookies):
for key in new_cookies:
self.cookies[key] = new_cookies[key] def req_get(self, url):
requests.session().cookies = requests.utils.cookiejar_from_dict(self.cookies)
resp = self.session.get(url)
self.update_cookies(requests.utils.dict_from_cookiejar(resp.cookies))
print(self.cookies)
return resp def req_post(self, url, data):
requests.session().cookies = requests.utils.cookiejar_from_dict(self.cookies)
resp = self.session.post(url, data)
self.update_cookies(requests.utils.dict_from_cookiejar(resp.cookies))
#print(self.cookies)
return resp def login(self):
url = 'http://www.96bbs.com/member.php?mod=logging&action=login&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login'
page_res = self.req_get(url)
#print(page_res.text)
soup = BeautifulSoup(page_res.text, "html.parser")
rt = soup.find('root')
if rt:
rt = rt.text
soup = BeautifulSoup(rt, "html.parser")
else:
return None;
#print(rt);
bb = is_form_hash
cc = is_refer
formhash = soup.find(bb).get("value")
referer = soup.find(cc).get("value")
print(formhash)
print(referer)
url = 'http://www.96bbs.com/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=LVCbx&inajax=1'
data = {
'formhash': formhash,
'referer': referer,
'username': self.username,
'password': '加密后的密码',
'questionid': 0,
'answer': ''
}
resp = self.req_post(url,data)
soup = BeautifulSoup(resp.text, "html.parser")
rt = soup.find('root').text
print(rt) def visit_home(self):
url = 'http://www.96bbs.com/forum.php'
self.req_get(url) def visit_attachment(self,url):
resp = self.req_get(url)
print(resp.status_code)
print(resp.text)
return resp if __name__ == "__main__": haifeng = haifeng_crawler("你的用户名","密码需要根据页面取获取加密后的密码")
haifeng.login()
haifeng.visit_attachment("http://www.96bbs.com/forum.php?mod=attachment&aid=MjI0NzQ5OHw3YjNkMWMwY3wxNTQwMzYxMzEwfDQ5NzM5OXwzNTM5NTgy")
python 爬虫登录保存会话去获取只有登录能获取的数据的更多相关文章
- Python爬虫学习:四、headers和data的获取
之前在学习爬虫时,偶尔会遇到一些问题是有些网站需要登录后才能爬取内容,有的网站会识别是否是由浏览器发出的请求. 一.headers的获取 就以博客园的首页为例:http://www.cnblogs.c ...
- Python爬虫实战——反爬策略之模拟登录【CSDN】
在<Python爬虫实战-- Request对象之header伪装策略>中,我们就已经讲到:=="在header当中,我们经常会添加两个参数--cookie 和 User-Age ...
- Python爬虫入门(基础实战)—— 模拟登录知乎
模拟登录知乎 这几天在研究模拟登录, 以知乎 - 与世界分享你的知识.经验和见解为例.实现过程遇到不少疑问,借鉴了知乎xchaoinfo的代码,万分感激! 知乎登录分为邮箱登录和手机登录两种方式,通过 ...
- python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞?
在前面我们玩了好多静态的 HTML 想必你应该知道怎么去爬这些数据了 但还有一些常见的动态数据 比如 商品的评论数据 实时的直播弹幕 岛国动作片的评分 等等 这些数据是会经常发生改变的 很多网站就会用 ...
- 附: Python爬虫 数据库保存数据
原文 1.笔记 #-*- codeing = utf-8 -*- #@Time : 2020/7/15 22:49 #@Author : HUGBOY #@File : hello_sqlite3.p ...
- python爬虫笔记之用cookie访问需要登录的网站
目标:用cookie访问一个需要登录的网站 如图,直接访问会跳转到登录页面,提示登录. 运行结果: 直接在浏览器上输入该url,网站立马跳转到登录页面. 方法: 1.先手动登录,通过抓包获取coo ...
- python 爬虫newspaper3k 新闻爬去方法 利用第三方库
from newspaper import Article url = '你想要爬取的网站url' news = Article(url, language='zh') news .download( ...
- Python爬虫实战(一) 使用urllib库爬取拉勾网数据
本笔记写于2020年2月4日.Python版本为3.7.4,编辑器是VS code 主要参考资料有: B站视频av44518113 Python官方文档 PS:如果笔记中有任何错误,欢迎在评论中指出, ...
- Python爬虫+可视化教学:爬取分析宠物猫咪交易数据
前言 各位,七夕快到了,想好要送什么礼物了吗? 昨天有朋友私信我,问我能用Python分析下网上小猫咪的数据,是想要送一只给女朋友,当做礼物. Python从零基础入门到实战系统教程.源码.视频 网上 ...
随机推荐
- 一些常用的centos命令,记忆下,属于常用的
一些常用的centos命令,记忆下,属于常用的 查询内网IP hostname -I 查询外网IP curl ifconfig.me 查看硬盘使用情况 df -h 查看系统资源使用率 top 查看系统 ...
- C/S软件的自动升级部署
升级的原理有好几个,首先无非是将现有版本与最新版本作比较,发现最新的则提示用户是否升级.当然也有人用其它属性比较的,例如:文件大小,或者更新日期.而实现的方法呢? 在.Net时代,我们就有了更多的选择 ...
- mongodb(三)
索引详讲索引管理空间索引 for(var i = 0 ; i<200000 ;i++){ db.books.insert({number:i,name:i+"book"}) ...
- 模板导入 {include 模块名}
模板导入可以和上面讲的模板继承一起使用, 可以使用模板的批量复制和导入 下面举一个例子 我们先写一个需要导入模块的html tp1 {% extends 'master.html' %} {% bl ...
- 基于 DirectX11 的 MMDViewer 02-创建一个窗口
项目的创建和配置: 1.新建一个 Win32 空项目 2.创建源码文件夹.库文件夹和资源文件夹 3.在 VS2013(我使用的 IDE 是 vs2013)配置这些文件夹 这里使用了 $(Solutio ...
- effective javascript 学习心得
第2条:理解JavaScript的浮点数 1.js数字只有一种类型 2.见代码 /** * Created by Administrator on 2017/7/2. */ console.log(& ...
- FP寻源报错
ERROR [HY000] [Oracle][ODBC][Ora]ORA-01114: IO error writing block to file (block # ) ORA-01114: I ...
- cannot import name '_validate_lengths' from 'numpy.lib.arraypad'
在Anaconda下新配置了tensorflow环境,结果在引入skimage 包时报错,错误提示from numpy.lib.arraypad import _validate_lengths,找不 ...
- module 'tensorflow.contrib.rnn' has no attribute 'core_rnn_cell'
#tf.contrib.rnn.core_rnn_cell.BasicLSTMCell(lstm_size) tf.contrib.rnn.BasicLSTMCell(lstm_size)
- 301. Remove Invalid Parentheses去除不符合匹配规则的括号
[抄题]: Remove the minimum number of invalid parentheses in order to make the input string valid. Retu ...