handle处理器和自定义opener

urllib库数据挖掘【3】--自定义opener 我们之前使用的urlopen是一个特殊的opener,它是模块帮我们构建好的,但是urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。要支持这些功能,需要创建自定义opener对象。 1.通过request.build.opener()方法创建自定义opener对象 from urllib import request # 构建处理器对象(专门处理HTTP... 阅读详情

handle处理器和自定义opener

    本文将介绍handler处理器和自定义opener,更多内容请参考:python学习指南

opener和handleer

    我们之前一直使用的是urllib2.urlopen(url)这种形式来打开网页,它是一个特殊的opener(也就是模块帮我们建好的),opener是urllib2.OpenerDirectory的实例。
    但是基本的urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。所以要支持这些功能:
        使用相关的Handler处理器来创建特定功能的处理器对象;
        然后通过urllib2.build_opener()方法来使用这些处理器对象,创建自定义opener对象;
        使用自定义的opener对象,调用open()方法来发送请求。
    如果程序里所有的请求都使用自定义的opener对象,可以使用urllib2.install_opener()将自定义的opener对象定义为全局opener,表示如果之后凡是调用urlopen,都将使用这个opener(根据自己的需求来选择)

简单的自定义opener()

#-*- coding:utf-8 -*-
#12.urllib2_opener.py

import urllib2

#构建一个HTTPHandler处理器
http_handler = urllib2.HTTPHandler();

#调用urllib2.build_opener()方法,创建支持处理HTTP请求的opener
opener = urllib2.build_opener(http_handler)

#构建Request请求
request = urllib2.Request("http://www.baidu.com")

#调用自定义的opener对象的open()方法,发送request请求
response = opener.open(request)

#获取服务器响应内容
print(response.read())

这种方式发送请求得到的结果,和使用urllib2.urlopen()发送HTTP/HTTPS请求得到的结果是一样的。

如果在HTTPHandler()括号里面增加debuglevel=1参数,还会将Debug Log打开,这样程序在执行的时候,会把收包和发包的报头在屏幕上自动打印出来,方便调试,有时可以省去抓包的工作。

#仅需要修改的代码部分:
# 构建一个HTTPHandler 处理器对象,支持处理HTTP请求,同时开启Debug Log,debuglevel 值默认 0
http_handler = urllib2.HTTPHandler(debuglevel=1)

ProxyHandler处理器(代理设置)

使用代理IP,这是爬虫/反爬虫的第二大招,通常也是最好用的。

很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问字数多的不像正常人,它会禁止这个IP的访问。

所以我们可以设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取。

urllib2中通过ProxyHandler来设置使用代理服务器,下面代码说明如何使用自定义opener来使用代理:

#-*- coding:utf-8 -*-
#urllib2_proxyhandler.py


import urllib2

#构建了两个代理Handler,一个有代理IP,一个没有代理IP
httpproxy_handler = urllib2.ProxyHandler({"http":"120.76.55.49:8088"})
nullproxy_handler = urllib2.ProxyHandler({})

proxyswitch = True   #定义一个代理开关


#通过urllib2.build_opener()方法使用这些代理Handler对象,创建自定义opener

if proxyswitch:
    opener = urllib2.build_opener(httpproxy_handler)
else:
    opener = urllib2.build_opener(nullproxy_handler)

request = urllib2.Request("http://www.baidu.com/")

#1.如果这么写,只有使用opener.open()方法发送请才使用自定义的代理,而urlopen()使用自定义代理
response = opener.open(request)

#2.如果这么写,就是opener应用到全局,之后所有的,不管是opener.open()还是urlopen()发送请求,都将使用自定义代理
# urllib2.install_opener(opener)
# response = urllib2.urlopen(request)

print(response.read())

免费的开放代理获取基本没有成本,我们可以在一些代理网站上收集上收集这些免费代理,测试后如果可以用,就把它收集起来用在爬虫上面。

免费短期代理网站举例:
西刺免费代理IP
快代理免费代理
Proxy360代理
全网代理IP

如果代理IP足够多,就可以像随机获取User-Agent一样,随机选择一个代理去访问网站。

#-*- coding:utf-8 -*-
#14.urllib2_proxylisthandler.py

import urllib2
import random

proxy_list = [
    {"http" : "124.88.67.81:80"},
    {"http" : "124.88.67.81:80"},
    {"http" : "124.88.67.81:80"},
    {"http" : "124.88.67.81:80"},
    {"http" : "124.88.67.81:80"}
]

#随机选择一个代理
proxy = random.choice(proxy_list)
#使用选择的代理创建一个代理处理器
proxy_handler = urllib2.ProxyHandler(proxy)

opener = urllib2.build_opener(proxy_handler)

urllib2.install_opener(opener)

request = urllib2.Request("http://www.baidu.com/")
response = opener.open(request)

print(response.read())

    但是,这些免费开放代理一般会有很多人都在使用,而且代理寿命短、速度慢,匿名度不高,HTTP/HTTPS支持不稳定等缺点(免费没好货)。

    但是,专业爬虫工程师或爬虫公司会使用高品质的私密代理,这些代理通常需要找专门的代理供应商购买,再通过用户名/密码授权使用(舍不得孩子讨不到狼)

HTTPPasswordMgrWithDefaultRealm()

HTTPPasswordMgrWithDefaultRealm()类创建一个密码管理对象,用来保存HTTP请求相关的用户名和密码,主要应用两个场景:
1. 验证代理授权的用户名和密码(ProxyBasicAuthHandler())
2. 验证web客户端的用户名和密码(HTTPBasicAuthHandler())
ProxyBasicAuthHandler(代理授权验证)

如果我们使用之前的代码来使用私密代理,会报HTTP 407错误,表示代理没有通过身份验证:

urllib2.HTTPError:HTTP Error 407:Proxy Authentication Required

所以我们需要改写代码,通过:

    HTTPPasswordMgrWithDefaultRealm():来保存私密代理的用户密码
    ProxyBasicAuthHandler():来处理代理的身份。

#-*- coding:utf-8 -*-
#15.urllib2_proxy2.py

import urllib2
import urllib

#私密代理授权的账户
user = "mr_mao_hacker"
#私密代理授权的密码
passwd = "sffqry9r"

#私密代理IP
proxyserver = "61.23.123.43:16813"

# 1. 构建一个密码管理对象,用来保存需要处理的用户名和密码
passwdmgr = urllib2.HTTPPasswordMgrWithDefaultRealm()  

#2. 添加账户信息,第一个参数是realm是与远程服务器相关的域信息,一般没人管它都是写None,后面三个参数分别是 代理服务器,用户名,密码
passwdmgr.add_password(None, proxyserver, user, passwd)

#3. 构建一个基础用户名/密码验证的ProxyBasicAuthHandler处理器对象,参数是创建的密码管理对象
#注意:这里不再使用普通的ProxyHandler累了。
proxyauth_handler = urllib2.ProxyBasicAuthHandler(passwdmgr)

#4. 通过build_opener()方法使用代理handler对象,创建自定义opener对象,参数包括构建的proxyauth_handler
opener = urllib2.build_opener(proxyauth_handler)

#5.构建request请求
request = urllib2.Request("http://www.baidu.com/")

#6.使用自定义的opener发送请求
response = opener.open(request)

#7.打印响应内容
print(response.read())

HTTPBasicAuthHandler处理器(Web客户端授权验证)

http_web验证
有些Web服务器(包括HTTP/FTP等)访问时,需要进行用户身份验证,爬虫直接访问会报HTTP 401错误,表示访问身份未经授权:

urllib2.HTTPError:HTTP Error 401:Unauthorized

如果我们有客户端的用户名和密码,我们可以通过下面的方法去访问爬取:

# -*- coding:utf-8 -*-
import urllib
import urllib2

#用户名
user = "test"

#密码
passwd = "123456"

#web服务器IP
webserver = "18.123.123.1:16354"

#1. 构建一个用户密码管理对象,用来保存需要处理的用户密码
passmgr = urllib2.HTTPPasswordMgrWithDefaultRealm()

#2. 添加账户信息,第一个参数是realm与远程服务器相关的域消息,一般没人管都是写None,后面三个参数分别是服务器,用户名,密码
passmgr.add_password(None, webserver, user, passwd)

#3.构建一个Http基础用户名/密码验证的HTTPBasicAuthHandler处理器对象,参数是创建的密码管理对象
httpauth_handler = urllib2.HTTPBasicAuthHandler(passmgr)

#4.通过build_opener()方法使用这些代理handler对象,创建自定义的opener对象,参数是创建的httpauth_handler
opener = urllib2.build_opener(httpauth_handler)

#5.可以选择通过install_opener()方法定义全局opener
urllib2.install_opener(opener)

#6.构建request对象
request = urllib2.Request("http://www.baidu.com/")

#7.定义opener为全局opener后,可直接使用urlopen()请求
response = urllib2.urlopen(request)

#8.打印回应
print(response.read())

Cookie

Cookie是指某些网站服务器为了辩护用户身份和进行Session,而存储在用户浏览器上的文本文件,Cookie可以保持登陆信息到用户下次与服务器的会话。
Cookie原理

HTTP是无状态的面向连接的协议,为了保持连接状态,引入了Cookie机制,Cookie是http消息头中的一种属性,包括:

Cookie名字(Name)
Cookie的值(Value)
Cookie的过期时间(Expires/Max-Age)
Cookie的作用路径(Path)
Cookie所在域名(Domain),
使用Cookie进行安全连接(Secure)。

前两个参数是Cookie应用的必要条件,另外,还保活Cookie大小(size, 不同浏览器对Cookie个数及大小限制是有差异的)

Cookie由变量名和值组成,根据Netscape公司的规定,Cookie格式如下:

Set-Cookie:NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

Cookie应用

Cookies在爬虫方面最典型的应用是判断注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续。

#-*- coding:utf-8 -*-
#16.urllib2_cookie.py

#获取一个有登陆信息的Cookie模拟登陆

import urllib2

#1.构建一个已经登陆过的用户的headers信息
headers = {
    "Host":"www.renren.com",
    "Connection":"keep-alive",
    "Upgrade-Insecure-Requests":"1",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36",
    "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Language":"zh-CN,zh;q=0.8,en;q=0.6",

    # 便于终端阅读,表示不支持压缩文件
    # Accept-Encoding: gzip, deflate, sdch,

    # 重点:这个Cookie是保存了密码无需重复登录的用户的Cookie,这个Cookie里记录了用户名,密码(通常经过RAS加密)
    "Cookie": "anonymid=ixrna3fysufnwv; depovince=GW; _r01_=1; JSESSIONID=abcmaDhEdqIlM7riy5iMv; jebe_key=f6fb270b-d06d-42e6-8b53-e67c3156aa7e%7Cc13c37f53bca9e1e7132d4b58ce00fa3%7C1484060607478%7C1%7C1484060607173; jebecookies=26fb58d1-cbe7-4fc3-a4ad-592233d1b42e|||||; ick_login=1f2b895d-34c7-4a1d-afb7-d84666fad409; _de=BF09EE3A28DED52E6B65F6A4705D973F1383380866D39FF5; p=99e54330ba9f910b02e6b08058f780479; ap=327550029; first_login_flag=1; ln_uact=mr_mao_hacker@163.com; ln_hurl=http://hdn.xnimg.cn/photos/hdn521/20140529/1055/h_main_9A3Z_e0c300019f6a195a.jpg; t=214ca9a28f70ca6aa0801404dda4f6789; societyguester=214ca9a28f70ca6aa0801404dda4f6789; id=327550029; xnsid=745033c5; ver=7.0; loginfrom=syshome"
}


#2.通过headers里的报头信息(主要是Cookie信息),构建request对象
request = urllib2.Request("http://www.renren.com", headers = hreaders)

#3.直接访问人人主页,服务器会根据headers信息(主要是Cookie信息),判断是否是一个已经登陆的用户,并返回相应的页面

response = urllib2.urlopen(request)

#4.打印响应内容
print(response.read())

但是这样做太过复杂,我们先需要在浏览器登录账户,并且设置保存密码,并且通过抓包才能获取这个Cookie,那么有更简单方便的方法呢?
cookielib库 和 HTTPCookieProcessor处理器

在Python处理Cookie,一般是通过cookielib模块和urllib2模块的HTTPCookieProcessor处理器一起使用

    cookielib模块:主要作用是提供用户存储cookie的对象
    HTTPCoolieProcessor处理器:主要作用是处理这些cookie对象,并构建handler对象。

cookielib库

该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

        CookieJar:管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。
        FileCookieJar(filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayload为True时支持延迟访问文件,即只有在需要时才读取文件或在文件中存储数据。
        MozillaCookieJar(filename, delayload=None, policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例。
        LWPCookieJar(filename, delay=None, policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的Set-Cookie3文件格式兼容的FileCookieJar实例。

其实大多数情况下,我们只用CookieJar(),如果需要和本地文件交互,就用MozillaCookieJar()或LWPCookieJar()
我们来做几个案例:

    获取Cookie,并保存到CookieJar()对象中

#-*- coding:utf-8 -*-
#18.urllib2_cookielibtest1.py

import cookielib
import urllib2

#构建一个CookieJar对象实力来保存cookie
cookiejar = cookielib.CookieJar()

#使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
handler = urllib2.HTTPCookieProcessor(cookiejar)

#通过build_opener()来构建opener
opener = urllib2.build_opener(handler)

#以get方式访问页面,访问之后会自动保存cookie到cookiejar中
opener.open("http://www.baidu.com")

###可以按照标准格式将保存的cookie打印出来
cookieStr = ""

for item in cookiejar:
    cookieStr = cookieStr + item.name + "=" +item.value+";"

##舍去最后一位的分号
print(cookieStr[:-1])

我们使用以上方法将Cookie保存到cookiejar对象中,然后打印出了cookie中的值,也就是访问百度首页的Cookie值。
运行结果如下:

BAIDUID=985AC680AE8947E7281186821669B597:FG=1;BIDUPSID=985AC680AE8947E7281186821669B597;H_PS_PSSID=1462_22533_21082_17001_25083_22157;PSTM=1511226559;BDSVRTM=0;BD_HOME=0

    访问网站获得cookie,并把获得的cookie保存在cookie文件中

#-*- coding:utf-8 -*-
#19.urllib2_cookielibtest2.py

import cookielib
import urllib2

#保存cookie的本地磁盘文件名
filename = "cookie.txt"

#声明一个MozillaCookieJar(有save实现)对象实例来保存cookie,之后写入文件
cookiejar = cookielib.MozillaCookieJar(filename)

#使用HTTPCookieProcessor()创建cookie处理器对象,参数为cookieJar()对象
handler = urllib2.HTTPCookieProcessor(cookiejar)

#通过build_opener()对象来构建opener
opener = build_opener(handler)

#创建一个请求,原理同urllib2的urlopen
response = opener.open("http://www.baidu.com")

#保存cookie到本地文件
cookiejar.save()

    从文件中获取cookies,做出请求的一部分去访问

# urllib2_cookielibtest2.py

import cookielib
import urllib2

# 创建MozillaCookieJar(有load实现)实例对象
cookiejar = cookielib.MozillaCookieJar()

# 从文件中读取cookie内容到变量
cookie.load('cookie.txt')

# 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
handler = urllib2.HTTPCookieProcessor(cookiejar)

# 通过 build_opener() 来构建opener
opener = urllib2.build_opener(handler)

response = opener.open("http://www.baidu.com")

利用cookielib和post登陆人人网

import urllib
import urllib2
import cookielib

# 1. 构建一个CookieJar对象实例来保存cookie
cookie = cookielib.CookieJar()

# 2. 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
cookie_handler = urllib2.HTTPCookieProcessor(cookie)

# 3. 通过 build_opener() 来构建opener
opener = urllib2.build_opener(cookie_handler)

# 4. addheaders 接受一个列表,里面每个元素都是一个headers信息的元祖, opener将附带headers信息
opener.addheaders = [("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36")]

# 5. 需要登录的账户和密码
data = {"email":"mr_mao_hacker@163.com", "password":"alaxxxxxime"}  

# 6. 通过urlencode()转码
postdata = urllib.urlencode(data)

# 7. 构建Request请求对象,包含需要发送的用户名和密码
request = urllib2.Request("http://www.renren.com/PLogin.do", data = postdata)

# 8. 通过opener发送这个请求,并获取登录后的Cookie值,
opener.open(request)                                              

# 9. opener包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = opener.open("http://www.renren.com/410043129/profile")  

# 10. 打印响应内容
print response.read()

模拟登陆要注意几点:

        登陆一般都会先有一个HTTP GET,用于拉取一些信息及获得Cookie,然后再HTTP POST登陆
        HTTP POST登陆的链接有可能是动态的,从GET返回的信息中获取。
        password有些是明文发送给,有些是加密后发送。有些网站甚至采用动态加密的,同时包括了很多其他数据的加密信息,只能通过查看JS源码获得加密算法,再去破解加密,非常困难。
        大多数网站的登陆整体流程是类似的,可能有些细节一些,所以不能保证其他网站登陆成功。

这个测试案例中,为了让大家快速理解知识点,我们使用的人人网登陆接口是人人网改版前的隐藏接口(嘘...),登陆比较方便。

当然,我们也可以直接发送账号密码到登陆界面模拟登陆,但是当网页采用JavaScript动态技术以后,想封锁基于HttpClient的模拟登陆就太容易了,甚至可以根据你的鼠标活动的的特征准确地判断出是不是真人在操作。

所以,想做通用的模拟登陆还是选别的技术,比如用内置浏览器引擎的爬虫(关键词:Selenium, PyantomJS),这个我们将在以后会学习到。

 

python爬虫(六)_urllib2:handle处理器和自定义opener 构建一个HTTPHandler处理器#调用urllib2 . build_opener() 方法,创建支持处理 HTTP 请求的openeropener = urllib2 . build_opener(http_handler) #构建Request请求request = urllib2 . Request("http://www.baidu.com") #调用自定义的opener对象的open() 方法,发送request请求。 阅读详情

相关推荐

爬虫_011_cookie登录&handler处理器

在需要进入个人信息页面时,服务器会跳转到登录页面,登录页面的编码不是utf-8,个人信息页面是utf-8,故在爬取个人信息页面的数据时,会报错编码错误,此时我们就需要cookie登录了。【在请求头中最好留下refere】二、handler处理器【更高级的请求头】-- 处理动态cookie和代理ip不能进行请求定制。refere是防盗链,判断当前页面是不是由上一个路径跳转。2.通过handler对象获取opener对象。1.获得handler对象。3.调用open方法。4.获取百度首页源码。

m0_74354274的博客 775

通俗易懂聊springMVC中的handler是什么

了解过SpingMVC流程的同学一定听说过handler,百度翻译过来是处理者,很多博客中称之为处理器.那就按照大部分人的说法称呼它为控制器.说道控制器,会不会联想到我们平常写业务代码中的各种controller,也是控制器,是不是一种东西啊,这里可以大胆猜测一下就是一种东西嘛.好,现在通过源码进行验证猜测! 如果直接从源码中按照类文件类型直接搜索Handler是找不到的,根据springMVC的工作流程开始捋(有很多帖子说过这里不在重述),最早出现handler是在这个地方: AbstractHandle

weixin_43401380的博客 6473

「免费开源」从 OCR 识别到结构化输出:合同文本高效比对的完整解决方案!

本文将系统拆解这一解决方案的技术逻辑、实施步骤与落地价值,为企业合同管理数字化转型提供实操指南。字段提取:自动识别并提取预设的关键字段(如 “甲方”“乙方”“合同金额”“履约期限” 等),若遇到模糊表述(如 “付款时间为合同签订后 30 个工作日内”),系统可自动解析为 “履约期限:合同签订日 + 30 工作日”;预设结构化字段:根据合同类型(如采购合同、服务合同、租赁合同),定义需提取的关键字段(如 “甲方名称”“乙方名称”“合同金额”“有效期起 / 止日期”“履约地点”“违约金比例” 等);

qxsz_yyh的博客 836

闲话handle和handler

虽然handle和handler只有一个字符之差,但在计算机的世界里,含义却大相径庭。 1. 先说说handle 北京话说"一边儿玩儿去,玩勺子把儿去","勺子把儿"说的就是handle。而将handle译成"句柄"绝对是一个相当文雅相当阳春白雪的翻译,因为太文绉绉啦,很多文化底蕴不够的码农就看不大懂了或者望而生畏。为了弄明白为什么这么整,我费了点儿周折。 句柄者,弯杆杆儿,弯把手儿...

weixin_30672019的博客 1186

【AI助力科研】不看一篇文献,手把手教你用chatGPT写文献综述!

这篇文章以【AI助力科研】为题,介绍了如何利用ChatGPT编写文献综述的方法。作者通过详细的指导,展示了不需要阅读大量文献,只需依靠ChatGPT模型即可完成文献综述的过程。该方法旨在提高科研工作者的效率,减少阅读负担,并且能够生成具有逻辑性和准确性的文献综述。

研究方向//图像视频处理/信号算法/红外无损检测/数值仿真/机器学习/优化算法/python/matlab 2万+

Vcenter虚拟机磁盘转换实战:如何用StarWind V2V将vmdk转为qcow2(附空间优化技巧)

本文详细介绍了如何使用StarWind V2V Converter将Vcenter中的vmdk虚拟机磁盘高效转换为qcow2格式,并提供了空间优化技巧。从准备工作、导出vmdk文件到转换过程中的性能调优,帮助管理员在迁移虚拟机时减少资源消耗,确保数据完整性和性能。

dell8的博客 203

handle的基本概念和使用

在计算机科学中,被特别地翻译成"句柄",其实还是个"柄"。从广义上,能够从一个数值拎起一大堆数据的东西都可以叫做句柄。句柄的英文是"Handle",本义就是"柄",从一个小东西拎起一大堆东西,就像是个"柄"。

m0_51838652的博客 853

MATLAB实战:手把手教你搭建构网逆变器同步稳定性仿真模型(附避坑指南)

本文详细介绍了如何在MATLAB/Simulink平台上搭建构网逆变器同步稳定性仿真模型,涵盖从基础模块配置到虚拟同步机控制实现的完整流程。针对电力电子工程师常见的控制参数整定困难、仿真结果偏差等问题,提供了LCL滤波器谐振抑制、虚拟惯量优化等关键技术解决方案,并附有避坑指南和工程实践技巧,助力研究者高效完成仿真建模。

weixin_29051193的博客 297

处理器 Handler 详解

(2)也不调用ctx.fireChannelXxx()[ctx.fireChannelRead(msg)方法是另外一种入站向下传递的方法]handlerAdded()→channelRegistered()→channelActive()→入站方法回调。是在完成ch.pipeline().addLast(handler)语句之后,会回调handlerAdded()。入站方法会多次调用,每一次有。ChannelHandler通道处理器的入站/出站处理方法中,Netty都会传递一个Context上下。

这个人很懒什么都没有~ 2079

大红球预警版-精选+自定义板块监控

这是一款简单易用的股票大单资金监控插件,兼容通达信软件,可嵌入分时图或定制版面。它以红绿圆球直观显示主力买卖情况(红球为买,绿球为卖),支持300万以上大单语音播报。插件提供实时资金流向分析、多股同时监控、自定义预警条件等功能,无需L2账号。用户可自由切换图形/列表模式,监控特定板块,并配合幻影软件实现自动交易。虽然上涨股通常红球占优,但需结合其他指标综合判断。该插件完全免费,包含详细视频教程,适合新手使用。

guleba的博客 1794

【WLAN】【调试】如何使用Wireshark分析加密的WiFi数据包

- 当配置网卡为monitor 模式的情况下,可以使用 wireshark来抓取空口报文; - 如果WiFi采用非Open加密方式,则从报文中仅能分析到 802.11协议层,更底层(如DHCP、ICMP、TCP等)被加密,此时可以使用 wireshark 来完成解密。 - 解密之后,可以通过icmp、tcp等关键词过滤报文。

一介草民,只为生活。 2985

python3下urllib.request库高级应用之Handle处理器和自定义Opener

python3下urllib.request库高级应用之Handle处理器和自定义Opener 经过前面对urllib.request库的频繁使用,都知道我们使用urllib库请求是都是使用urlopen()方法实现的。实际上它的底层是使用HTTPHandler个Opener来实现的。查看urllib.request库里的urlopen()方法的源码。 def urlope...

weixin_34010566的博客 216

【入门AUTOSAR网络管理测试】RSS-PBM状态转换

随着智能电动汽车行业的快速发展,目前AUTOSAR网络管理也得到了广泛应用,AUTOSAR网络管理测试也是汽车网络测试中非常重要的环节,NM问题导致的汽车ECU不能唤醒、电瓶亏电等问题,对于新入门AUTOSAR网络管理测试的同学不清楚如何开展测试,那么本章节就主要给大家介绍网络管理中RSS-PBM状态转换如何测试。【入门AUTOSAR网络管理测试】AUTOSAR网络管理规范需求解读。

测试领域技术分享 872

自定义request_python3下urllib.request库之Handle处理器和自定义Opener

python3下urllib.request库高级应用之Handle处理器和自定义Openerpython3下urllib.request库高级应用之Handle处理器和自定义Opener 经过前面对urllib.request库的频繁使用,都知道我们使用urllib库请求是都是使用urlopen()方法实现的。实际上它的底层是使用HTTPHandler个Opener来实现的。查看urllib....

weixin_42344284的博客 425

【异常】OpenClaw总Token超限400报错400 Total tokens of image and text exceed max message tokens. Request id:

摘要: 多模态大模型调用中,图文总Token超限导致的400报错是常见问题。本文分析了该报错的触发原因(文本+图片Token总和超出接口限额),并从技术层面解释了多模态Token的计数规则。解决方案分为三个层次:1)紧急修复(精简文本、压缩图片、拆分请求);2)标准化根治(预校验Token、图片预处理、限额适配);3)进阶兜底(分块处理、模型升级、容错机制)。通过前置管控与源头优化,可有效解决并预防此类问题,提升业务稳定性。

奶爸的编程之路,也就一周冷个三天 832

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python爬虫(四)_urllib2:handle处理器和自定义opener

opener和handleer 我们之前一直使用的是urllib2.urlopen(url)这种形式来打开网页,它是一个特殊的opener(也就是模块帮我们建好的),opener是urllib2.OpenerDirectory的实例。 但是基本的urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。所以要支持这些功能: 使用相关的Handl...

weixin_30483697的博客 160

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

爬虫原理与数据抓取-----Handler处理器 和 自定义Opener

Handler处理器 和 自定义Opener opener是 urllib2.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构建好的)。 但是基本的urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。所以要支持这些功能: 使用相关的Handler处理器来创建特定功...

weixin_34404393的博客 148

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Python爬虫学习笔记三:Handler处理器,代理, cookie

1.Handler处理器,自定义Opener import urllib.request import urllib.parse url = 'http://www.baidu.com' headers{ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73....

W_H_M_2018的博客 1199

proxyhandler处理器(新手上路)

proxyhandler处理器(代理) 代理的原理:在请求目的网站之前,先请求代理服务器,然后让代理服务器去请求目的网站。代理服务器拿到目的网站的数据后,再转发 给我们的代码。 http://httpbin.org/ip;(这个网站可以方便的查看http请求的一些参数。) 在代码中使用代理:*使用‘urllib.request.ProxyHandler’,传入一个代理,这个代理...

weixin_30640769的博客 535

2.03-handler_openner

import urllib.request def handler_openner(): #系统的urlopen并没有添加代理的功能所以需要我们自定义这个功能 #安全 套接层 ssl第三方的CA数字证书 #http80端口# 和https443 #urlopen为什么可以请求数据 handler处理器 #自己的oppener请求数据 ...

weixin_30872671的博客 159

ProxyHandler处理器(代理设置)----爬虫学习

ProxyHandler处理器(代理设置) 很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多的不像正常人,它会禁止这个IP的访问。 所以我们可以设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取。 urllib中通过ProxyHandler来设置使用代理服务器,下面代码说明如何使用自定义opener来使用代理: from urllib import request #这个是没有使用代理的 resp = request.urlopen(‘

python_Allen的博客 432

ProxyHandler处理器及编码学习

1、今天学习ProxyHandler,主要用这个来请求代理服务器首先创建一个handler=request.ProxyHandler({"http":"111.20.101.70:80"}) (handler是伪装本地地址)我通过http://httpbin.org/ip请求本地IP,每次不一样,应该是我们家里的IP都是随机变动的。 代理网站有三个: 1、西刺免费代理 ...

forceair的博客 261

proxyHandler处理器(代理设置)

很多网站会检测某一段时间某个ip的访问次数,如果访问次数多的不像正常人,它会禁止这个IP的访问。 ProxyHandle处理器(代理): 1、代理原理:在请求目的的网站之前,先请求代理服务器,然后让代理服务器去请求目的网站,代理服务器拿到目的网站的数据后,再转给我们的代码。 2.http://httpbin.org; 这个网站可以方便的查看http请求的一些参数。 3、在代码中使用代理: • 使用"urllib.request.ProxyHandler",传入一个代理,这个代理是一个字典,字典的key依

weixin_44269952的博客 486

python3-urllib_Handler_1

本文主要讲述如何基于python3.x的urllib库(官方标准库),实现自定义的Handler处理器,代码中实现的效果可以用其他简单的方式实现,这里只是举例 语言版本:Python 3.7 测试链接:http://httpbin.org 前述 通常我们请求一个链接的python代码写法是: import requests url = "http://httpbin.org/get" res...

yeshankuangrenaaaaa的博客 1846
上一篇: 爬虫
下一篇: 正则表达式
qq_15551663
博客等级 码龄12年 4粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值