python--实践--模拟浏览器(http)登陆
#方法一:直接使用coookies登陆,此方法需要提前在浏览器中使用账号密码登陆后,获取浏览器中的cookies,在构造的请求中携带这个cookies(缺点是有时效性)。
#方法二:通过账号密码(From data)登陆,在登陆后获得其中的cookies,之后的对需要登陆的页面操作,只需要携带这个cookies即可
#以下代码是利用方法1
# -*- coding: utf-8 -*-
import requests;
import sys;
import io;
#重点:标准解析库
from bs4 import BeautifulSoup;
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8'); #改变标准输出的默认编码
#根据cookies访问后台
url = 'http://域名/other/other.comment.wall.php?ac=l&id=&fid=&uid=&title=&source=0&status=0&b_time=&e_time='; #浏览器登录后得到的cookie,也就是刚才复制的字符串
cookie_str = r'PHPSESSID=9f20c6bb676841f38aee8589aceb5c7f; username=zhonghuihong; password=XXX';
#把cookie字符串处理成字典,以便接下来使用
cookies = {};
for line in cookie_str.split(';'):
key, value = line.split('=', 1);
cookies[key] = value;
#设置请求头,直接复制即可
headers = {'User-agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36'};
疑问:请求头header是不是必须要加
搜罗网上的答复:
23 ①、不加,直接裸着请求url,似乎也没有报错,自己尝试也是这样
24 ②、防止封ip,加上准没错
25 ③、禁止反扒机制,输出的text信息中会出现抱歉,无法访问等字眼,这就是禁止爬取(headers是解决requests请求反爬的方法之一,相当于我们进去这个网页的服务器本身,假装自己本身在爬取数据)
26 ④、作为一个良好的习惯,最好都要加上 疑问二:请求头里面已经含有cookies,请求时是否还要重复添加一个cookies=cookies参数
根据自己的实践:不需要重复添加 疑问三:为什么访问android端的接口基本不用提前设置header
header里面是手机端信息,通过手机端页面去爬不会那么容易被封(这个是询问网友来着,至今不知道原因),根据目前实践确实不需要 #在发送get请求时带上请求头和cookies()
resp = requests.get(url, headers = headers, cookies = cookies);
html_resp=resp.content.decode('UTF-8');
#print(resp.content.decode('utf-8'));
soup_string = BeautifulSoup(html_resp, 'html.parser');
soup_table=soup_string.find(attrs={'class':'table table-striped table-bordered table-hover'});
#print(soup_table);
soup_str=soup_table.findAll(attrs={'style':'text-align:center;vertical-align:middle;word-break:break-all; word-wrap:break-all;'});
print(soup_str);
#for soup in soup_str:
#print(soup.string);
#book_div = soup_string.find(attrs={"id":"book"})
#book_a = book_div.findAll(attrs={"class":"title"})
#for book in book_a:
#print book.string
#print(soup_string);
python--实践--模拟浏览器(http)登陆的更多相关文章
- python模拟浏览器webdriver登陆网站后抓取页面并输出
关键在于以下两行代码 特别是find_element_by_xpath写法 很多写成 findElementsByXpath不知道是写错了 还是高级版本是这么写的... #webElement = s ...
- 九、Python+Selenium模拟用QQ登陆腾讯课堂,并提取报名课程(练习)
研究QQ登录规则的话,得分析大量Javascript的加密解密,比较耗时间.自己也是练习很少,短时间成功不了.所以走了个捷径. Selenium是一个WEB自动化测试工具,它运行时会直接实例化出一个浏 ...
- python selenium模拟登陆163邮箱。
selenium是可以模拟浏览器操作. 有些爬虫是异步加载的,通过爬取网页源码是得不到需要的内容.所以可以模拟浏览器去登陆该网站进行爬取操作. 需要安装selenium通过pip install xx ...
- python爬虫:使用Selenium模拟浏览器行为
前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...
- Spider-Python爬虫之使用Selenium模拟浏览器行为
分析 他的代码比较简单,主要有以下的步骤:使用BeautifulSoup库,打开百度贴吧的首页地址,再解析得到id为new_list标签底下的img标签,最后将img标签的图片保存下来. header ...
- python urllib2 模拟网站登陆
python urllib2 模拟网站登陆 1. 可用浏览器先登陆,然后查看网页源码,分析登录表单 2. 使用python urllib2,cookielib 模拟网页登录 import urllib ...
- 【小白学爬虫连载(10)】–如何用Python实现模拟登陆网站
Python如何实现模拟登陆爬取Python实现模拟登陆的方式简单来说有三种:一.采用post请求提交表单的方式实现.二.利用浏览器登陆网站记录登陆成功后的cookies,采用get的请求方式,传入c ...
- Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取
区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...
- python下selenium模拟浏览器基础操作
1.安装及下载 selenium安装: pip install selenium 即可自动安装selenium geckodriver下载:https://github.com/mozilla/ge ...
- Python实现模拟登陆
大家经常会用Python进行数据挖掘的说,但是有些网站是需要登陆才能看到内容的,那怎么用Python实现模拟登陆呢?其实网路上关于这方面的描述很多,不过前些日子遇到了一个需要cookie才能登陆的网站 ...
随机推荐
- 【原创】大数据基础之Logstash(3)应用之http(in和out)
一个logstash很容易通过http打断成两个logstash实现跨服务器或者跨平台间数据同步,比如原来的流程是 logstash: nginx log -> kafka 打断成两个是 log ...
- 【原创】大数据基础之Logstash(3)应用之file解析(grok/ruby/kv)
从nginx日志中进行url解析 /v1/test?param2=v2¶m3=v3&time=2019-03-18%2017%3A34%3A14->{'param1':' ...
- [转] 为什么说 Java 程序员必须掌握 Spring Boot ?
Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,那么, Spring Boot 诞生的背景是什么?Spring 企业又是基于什么样的考虑创建 Spring Boot ...
- 硬盘性能测试工具fio
如何衡量云硬盘的性能 IOPS:每秒读/写次数,单位为次(计数).存储设备的底层驱动类型决定了不同的 IOPS. 吞吐量:每秒的读写数据量,单位为MB/s. 时延:IO操作的发送时间到接收确认所经过的 ...
- matplotlib报错_tkinter.TclError: no display name and no $DISPLAY environment variable
import matplotlib import matplotlib.pyplot as plt fig=plt.figure() #交互式测试,此时报错 解决办法,在引用后添加下面这一行 matp ...
- Oracle 闪回
Oracle 闪回特性(FLASHBACK DATABASE) 本文来源于:gerainly 的<Oracle 闪回特性(FLASHBACK DATABASE) > -========== ...
- 使用 mod_rewrite 来修改 Confluence 6 的 URLs
备注:这个页面的文档是 Apache 的配置,而不是 Confluence 自己的配置.Atlassian 将会对 Confluence 的配置提供支持,但是我们不能保证能够对你所有在配置 Apach ...
- Confluence 6 PostgreSQL 设置准备
请查看 Supported Platforms 页面来获得 Confluence 系统支持的 PostgreSQL 数据库版本.你需要在安装 Confluence 之前升级你的 PostgreSQL ...
- ES6之Set与Map加深理解
Set 类似于数组,但是成员的值都是唯一的,没有重复的值,有序. Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化. 用途 数组去重: [...new ...
- kindedit编辑器和xxs攻击防护(BeautifulSoup)的简单使用
一.kindedit编辑器 就是上面这样的编辑输入文本的一个编辑器 这也是一个插件.那么怎么用呢? 1.下载:百度kindedit 2.引入: <script src="/static ...