当前位置:首页 > 网络黑客 > 正文内容

Web爬虫:多线程、异步与动态署理开始

访客3年前 (2021-04-15)网络黑客602

在收集数据的时分,经常会碰到有反收集战略规矩的WAF,使得原本很简略工作变得复杂起来。黑名单、约束拜访频率、检测HTTP头号这些都是常见的战略,不按常理出牌的也有检测到爬虫行为,就往里注入假数据回来,以假乱真,但为了杰出的用户体会,一般都不会这么做。在遇有反收集、IP地址不行的时分,一般咱们想到的是运用很多署理处理这个问题,因署理具有时效、不稳定、拜访受限等不确定要素,使得有时分运用起来总会碰到一些问题。
进入正题,运用Python3简略完成一个单机版多线程/异步+多署理的爬虫,没有分布式、不谈高功率,先跑起来再说,脑补开端。。。
0×01 基础知识
1.1 署理类型
运用署理转发数据的一起,署理服务器也会改动REMOTE_ADDR、HTTP_VIA、HTTP_X_FORWARDED_FOR这三个变量发送给方针服务器,一般做爬虫的挑选优先级为高匿 > 混杂 > 匿名 > 通明 > 高透
高透署理(High Transparent Proxy):单纯地转发数据
REMOTE_ADDR = Your IP
HTTP_VIA = Your IP
HTTP_X_FORWARDED_FOR = Your IP
通明署理(Transparent Proxy):知道你在用署理,知道你IP
REMOTE_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWARDED_FOR = Your IP
匿名署理(Anonymous Proxy):知道你用署理,不知道你IP
REMOTE_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWARDED_FOR = Your Proxy
高匿署理(High Anonymity Proxy):不知道你在用署理
REMOTE_ADDR = Proxy IP
HTTP_VIA = N/A
HTTP_X_FORWARDED_FOR = N/A
混杂署理(Distorting Proxies):知道你在用署理,但你的IP是假的
REMOTE_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWARDED_FOR = Random IP
1.2 署理协议
一般有HTTP/HTTPS/Socks类型,Web爬虫一般只用到前面两者。
1.3 动态署理
完成动态署理一般是树立署理池,运用的时分一般有以下几种方法
本地存储调用,将署理保存到数据库中,需求时载入,爬虫能够作为验证署理的一部分,但署理欠安的情况下功率并不高

署理会集转发,经过树立本地署理主动切换转发,调用便利,但需求做额定的署理验证程序

经过接口获取,一般经过购买服务获取,署理质量较佳,能够结合以上两种方法运用
1.4 多线程
多线程是完成使命并发的方法之一。在Python中完成多线程的计划比较多,最常见的是行列和线程类
que = queue.Queue()
def worker():
    while not que.empty():
        do(que.get())
threads = []
nloops = 256
# start threads
for i in range(nloops):
    t = threading.Thread(target=worker)
    t.start()
    threads.append(t)
# wait for all
for i in range(nloops):
    threads[i].join()
别的也能够运用map完成,map能够经过序列来完成两个函数之间的映射,并结合multiprocessing.dummy完成并发使命
from multiprocessing.dummy import Pool as ThreadPool
urls = ['http://www.freebuf.com/1',
        'http://www.freebuf.com/2']
pool = ThreadPool(256) # pool size
res  = map(urllib.request.urlopen, urls)
pool.close()
pool.join()
好像更简练,多线程完成还有其他方法,详细哪一种更好,不能混为一谈,但多线程操作数据库可能会发生很多的数据库TCP/socket衔接,这个需求调整数据库的最大衔接数或选用线程池之类的处理。
1.5 异步IO
asyncio是在Python3.4中新增的模块,它供给能够运用协程、IO复用在单线程中完成并发模型的机制。async/await这对关键字是在Python3.5中引进的新语法,用于协成方面的支撑,这无疑给写爬虫多了一种挑选,asyncio包含一下首要组件:
事情循环(Event loop)
I/O机制
Futures
Tasks
一个简略比如:
que = asyncio.Queue()
urls = ['http://www.freebuf.com/1',
        'http://www.freebuf.com/2']
async def woker():
    while True:
        q = await que.get()
        try:
            await do(q)
        finally:
            que.task_done()
async def main():
    await asyncio.wait([que.put(i) for i in urls])
    tasks = [asyncio.ensure_future(self.woker())]
    await que.join()
    for task in tasks:
        task.cancel()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
运用行列是因为后边还要往里面回填数据,注:asyncio中的行列Queue不是线程安全的
0×02 获取与存储数据
2.1 加署理的GET恳求
多线程
署理类型支撑http、https,其他类型没有去测验
pxy = {'http': '8.8.8.8:80'}
proxy_handler = urllib.request.ProxyHandler(pxy)
opener = urllib.request.build_opener(proxy_handler)

[1] [2] [3]  黑客接单网

扫描二维码推送至手机访问。

版权声明:本文由黑客接单发布,如需转载请注明出处。

本文链接:http://therlest.com/106579.html

分享给朋友:

“Web爬虫:多线程、异步与动态署理开始” 的相关文章

奥运会遭到俄罗斯黑客攻击!黑客攻击微信聊天记录

人民网2021年8月13日02:28:03的消息,黑客攻击微信聊天记录 东京奥运会惨遭俄罗斯黑客攻击! 英国国家网络安全中心日前揭露了一项惊人的黑客计划:俄罗斯军事情报部门曾准备对原定今夏举办的东京奥林匹克运动会和残奥会发起网络攻击。据悉,其攻击目标涵盖赛事组织者、后勤公司和赞助商。 打开百...

【干货知识】高級不断渗透第八季-demo就是远程控制

本季度是《高級不断渗透-第七季demo的发展》的持续。 点一下文尾左下角“阅读”可阅读文章第七季文章正文。 在第一季有关后门中,文章内容提及再次编译程序notepad ,来引入有目标源代码后门结构。 在第六季有关后门中,文章内容假定不在获知notepad 的源代码,来引入无目标源代码沟...

为什么反复烧开的水会有毒?

为什么反复烧开的水会有毒? 千滚水就是在炉上沸腾了一夜或很长时间的水,还有电热水器中反复煮沸的水。这种水因煮过久,水中不挥发性物质,如钙、镁等重金属成分和亚硝酸盐因浓缩后含量很高。久饮这种水,会干扰人的胃肠功能,出现暂时腹泻、腹胀;有毒的亚硝酸盐还会造成机体缺氧,严重者会昏迷惊厥,甚至死亡。 蒸...

茯苓多少钱一克贵吗 - 土茯苓和茯苓哪个贵

因为很难挖到。茯苓2点5-3点5元一两,2016年1月4日更新。 30元左右一斤,还有以后.药店的销售价格通常在20,价格更高些,我在这边收购,2011年茯苓价格分两种价格,也就是两种产品,心;脾;肺;肾经。也和并不容易挖到。 4]渗湿利水;健脾和胃;宁心安神。即使在茯苓产地的山里面,茯苓价格悄悄地...

统一柴机油价格 「柴机油和润滑脂」

不过他们不能混着用的统一,这个价格会便宜一点的,大桶,价格较高。我现在都是在美宴网买的进口机油,其次金引擎柴机油的油压稳定,cSt。 金引擎柴机油基础油均采用合成油,我就知道美孚.价格在280左右,工作小时,但其他渠道假货多。cSt,大桶。 壳,价格根据产品规格不同而定。有知道统一昆仑,长城,嘉实多...

英寸和米的换算(这些单位换算你还知道吗?)

英寸和米的换算(这些单位换算你还知道吗?) 一寸等于多少厘米 更新:2016-03-28 14:07:21 查看相关文章 一寸等于多少厘米 1寸=3.3333333厘米(cm) 1英寸(in)=2.54厘米(cm) 一寸等于多少毫米 1寸=33.3333333毫米(mm) 1英寸...

评论列表

囤梦怯朲
2年前 (2022-06-30)

地址不行的时分,一般咱们想到的是运用很多署理处理这个问题,因署理具有时效、不稳定、拜访受限等不确定要素,使得有时分运用起来总会碰到一些问题。进入正题,运用Python3简略完成一个单机版多线程/异步+多署理的爬虫,没有分布式、不谈高功率,先跑起来再说,脑补开端。。。0

澄萌音梦
2年前 (2022-06-30)

么做。在遇有反收集、IP地址不行的时分,一般咱们想到的是运用很多署理处理这个问题,因署理具有时效、不稳定、拜访受限等不确定要素,使得有时分运用起来总会碰到一些问题。进入正题,运用Python3简略完成一个单机版多线程/异步+多署理的爬虫,没有分

辞眸卿绡
2年前 (2022-06-30)

ler(pxy)opener = urllib.request.build_opener(proxy_handler)[1] [2] [3]  黑客接单网

惑心节枝
2年前 (2022-06-30)

eads = []nloops = 256# start threadsfor i in range(nloops):    t = threading.Thread(target=worker)    t.start()    threads.append(t)# wait for

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。