大数据时代,各行各业对数据采集的需求越来越大,网络爬虫的使用也更加广泛??。越来越多的人开始学习网络爬虫这门技术,K爬虫哥之前发布过很多爬虫进阶和逆向相关的文章。为做到从易到难全面覆盖,特设专栏【0爬虫基础】帮助小白快速上手爬虫。这个问题是代理的基本使用。代理概述ip地址是一个唯一的地址,用于标识Internet或本地网络设备,代理ip也称为代理服务器(ProxyServer)。它的主要功能是作为一个中间层,代替用户与目标服务器进行通信。客户端与服务器交互时,像抓包工具一样,客户端发起的请求会经过代理服务器,通过代理服务器转发。服务器收到请求后,获取到的IP就是代理服务器的IP地址。这样就隐藏了真实的ip。Proxy作用Proxyip的应用范围很广,其主要应用场景有:突破访问限制:一些网站会根据用户的IP地址来限制访问,使用proxyip可以绕过这些限制。爬虫数据采集:在批量采集数据时,爬虫程序需要使用代理ip来防止被目标网站屏蔽或限制访问。提高网络安全性:通过代理IP隐藏真实IP地址,防止黑客攻击、钓鱼等安全威胁。Proxy分类Proxy可以根据匿名性、支持的协议、地理位置、使用方式、质量等级等不同特性进行分类,这里主要介绍前三者。高匿名代理根据匿名程度分类:高匿名代理也称为完全匿名代理,完全隐藏客户端的真实ip地址等信息。服务器无法知道请求来自哪个客户端,只能获取代理服务器地址的ip。此类代理速度快,稳定性高,但需要付费。普通匿名代理:普通匿名代理也称为匿名代理。它会隐藏客户端的ip地址,但是会暴露客户端的其他请求信息,比如HTTP请求头信息。服务器可以识别请求来自代理服务器,但无法追踪到客户端真实ip。这种类型的代理速度较慢且不太稳定。透明代理:透明代理也称为普通代理。不隐藏客户端的ip地址等请求信息。服务器可以获得发起请求的真实ip。因此,透明代理并没有太大的实际作用,很少使用。根据支持的协议分类,HTTP代理:HTTP代理通过http协议转发请求数据包,主要用于请求网页,访问受限网站,提高用户匿名性。HTTPS代理:HTTPS代理通过https协议转发请求包,可以帮助客户端和服务端建立安全的通信通道,主要用于加密隐私数据的传输。FTP代理:FTP代理用于转发FTP请求,主要用于数据的上传、下载和缓存。它可以为访问FTP服务器提供匿名、访问控制和速度优化等功能。SOCKS代理:SOCKS代理可以转发任何类型的网络请求,支持多重认证,是一个通用的网络代理。按地理位置分类,分为使用国外代理和国内代理。库时设置代理。下面使用的proxy是fastproxy提供的。通常,购买代理后,平台会提供IP地址、端口号、帐号和密码。在代码中设置代理时,代理数据类型通常是字典类型。格式如下:常见代理格式:proxy={'https://':'http://%(ip)s:%(port)s'%{"ip":ip,"port":port},'http://':'http://%(ip)s:%(port)s'%{"ip":ip,"port":port}}账号密码认证方式格式是:proxy={"http":"http://%(user)s:%(pwd)s@%(ip)s:%(port)s/"%{"user":username,"pwd":密码,"ip":ip,"port":port},"https":"http://%(user)s:%(pwd)s@%(ip)s:%(port)s/"%{"user":用户名,"pwd":密码,"ip":ip,"port":port}}如:proxy={'https':'http://112.74.202.247:16816','http':'http://112.74.202.247:16816'}urlliburllib需要使用ProxyHandler对象来设置代理,首先创建一个ProxyHandler对象,然后将代理服务器的地址和端口号传给它。然后使用build_opener方法创建一个Opener对象,并将创建的ProxyHandler传递给Opener。最后使用install_opener方法将Opener对象安装为一个全局的Opener,这样以后所有的urlopen请求都会用到这个Opener对象。importurllib.requestproxy={'https':'http://112.74.202.247:16816','http':'http://112.74.202.247:16816'}#代理地址proxy_handler=urllib.request.ProxyHandler(proxy)opener=urllib.request.build_opener(proxy_handler)urllib.request.install_opener(opener)response=urllib.request.urlopen('http://httpbin.org/get').read().decode('utf-8')print(response)#xxx"origin":"112.74.202.247"xxx设置代理请求网页后,可以看到响应信息中的origin值变成了我们设置的代理ip值。这表示代理ip设置成功,web服务器获取到的ip就是代理服务器的ip地址。使用urllib为请求设置代理比较麻烦,这也是urllib库的不足之处。在请求中设置代理非常简单。Request对象提供了一个参数来设置代理。importrequestsproxy={'https':'http://112.74.202.247:16816','http':'http://112.74.202.247:16816'}url='http://httpbin.org/get'response=requests.get(url,proxies=proxy)print(response.json())#xxx'origin':'112.74.202.247'xxxhttpxhttpx的作用和用法与requests基本相同,设置方法为也一样。唯一的区别是代理的键名。importhttpxproxy={'https://':'http://112.74.202.247:16816','http://':'http://112.74.202.247:16816'}url='http://httpbin.org/get'response=httpx.get(url,proxies=proxy)print(response.json())#xxx'origin':'112.74.202.247'xxxproxy代理字典中的键名由http,https改为到http://和https://。使用httpxClient设置代理也是一样,通过proxies参数传递。importhttpxproxy={'https://':'http://112.74.202.247:16816','http://':'http://112.74.202.247:16816'}withhttpx.Client(proxies=proxy)asclient:response=client.get('https://httpbin.org/get')print(response.json())#xxx'origin':'112.74.202.247'xxxaiohttpaiohttp中的代理设置与和其他库不同的是代理格式是字符串形式,通过proxy参数传递。importaiohttpimportasyncioasyncdefmain():asyncwithaiohttp.ClientSession()assession:asyncwithsession.get('https://httpbin.org/get',proxy=proxy)asresponse:print(awaitresponse.json())##xxx'origin':'112.74.202.247'xxxif__name__=='__main__':proxy="http://112.74.202.247:16816"loop=asyncio.get_event_loop()loop.run_until_complete(main())websocketwebsocket设置代理的方式有两种:第一种是fromwebsocketimportWebSocketAppdefon_message(ws,message):#Executeprint(message)whenreceivedamessagedefon_open(ws):#Executews.send("Hello当打开连接时,WebSocket!")#发送信息if__name__=="__main__":proxies={"http_proxy_host":"112.74.202.247","http_proxy_port":16816,}ws=WebSocketApp("ws://echo.websocket.org/",on_message=on_message)ws.on_open=on_openws.run_forever(**proxies)第二种ws=WebSocketApp("ws://echo.websocket.org/",http_proxy_host="112.74.202.247",http_proxy_port=16816)综上所述,在爬虫程序的开发中,代理的使用非常重要。无论是大规模的批量采集,还是简单的爬虫脚本,使用代理可以增加程序的性能和稳定性,前提是要使用优质的代理,优质的代理可以帮助开发者解决很多问题,是爬虫开发者必须学会使用的工具。
