爬虫中的代理技术
代理的使用场景
- 需要爬虫高频率地访问某一站点,同时站点又存在着反爬虫措施,会封掉高频率爬取的IP:例如访问得到403 Forbidden之后提示“您的 IP 访问频率太高”或者跳出一个验证码让我们输入,输入之后才可能解封。
2.需要访问境外的网站
代理的设置
爬虫中可以使用多种请求库,如 Requests、Urllib、Selenium 等,下面先梳理一下这些库的代理设置方法。
获取代理
设置代理,首先需要设置一个可用的代理,搜索引擎搜索“代理”关键字,就可以看到有许多代理服务网站,在网站上会有很多免费代理。免费代理大多数情况下都是不好用的,所以比较靠谱的方法是购买付费代理,很多网站都有售卖。或者如果我们本机有相关代理软件的话,软件一般会在本机创建 HTTP 或 SOCKS 代理服务,直接使用此代理也可以。
总结一下,代理的获取方法有两种:
·在网上获取或购买代理来获取的代理IP(如220.187.210.64:8118),在下一部分各个请求库的代理设置中使用该IP即可,而爬虫所带的伪装IP即为代理IP(220.187.210.64:8118);
·在本机安装并运行相关代理软件,这种方式获取的代理IP与启动代理软件时的配置有关——例如,使用V2ray代理软件时它会在本地 10809端口上创建 HTTP 代理服务,也就是说代理IP为 127.0.0.1:10809,另外还会在 10808 端口创建 SOCKS 5代理服务,也就是代理IP为 127.0.0.1:10808。同样,在下一部分各个请求库的代理设置中使用这些代理IP(127.0.0.1:10808,127.0.0.1:10809)即可,而爬虫所带的伪装IP则是代理软件V2ray所连接的服务器 IP.
设置代理后测试的网址是:http://httpbin.org/get,访问该站点可以得到请求的一些相关信息,其中 origin 字段就是客户端的 IP,我们可以根据它来判断代理是否设置成功,也就是是否成功伪装了IP。
Requests
对于 Requests 来说,代理设置比较简单,我们只需要传入 proxies 参数即可。在这里,我们使用本机代理软件创建的HTTP 代理服务,进行Requests 的代理的设置,如下:
1.import requests
2.
3.proxy = '127.0.0.1:10809'
4.proxies = {
5. 'http': 'http://' + proxy,
6. 'https': 'https://' + proxy,
7.}
8.try:
9. response = requests.get('http://httpbin.org/get', proxies=proxies)
10. print(response.text)
11.except requests.exceptions.ConnectionError as e:
12. print('Error', e.args)
如果代理需要认证,同样在代理的前面加上用户名密码即可,代理的写法就变成:
proxy = 'username:password@127.0.0.1:10809'
如果需要使用 SOCKS5 代理,则首先需要安装一个 Socks 模块:
pip3 install "requests[socks]"
同样使用本机运行代理软件的方式,则爬虫设置代理的代码如下:
1.import requests
2.
3.proxy = '127.0.0.1:10808'
4.proxies = {
5. 'http': 'socks5://' + proxy,
6. 'https': 'socks5://' + proxy
7.}
8.try:
9. response = requests.get('http://httpbin.org/get', proxies=proxies)
10. print(response.text)
11.except requests.exceptions.ConnectionError as e:
12. print('Error', e.args)
还有一种使用 socks 模块进行全局设置的方法,如下:
1.import requests
2.import socks
3.import socket
4.
5.socks.set_default_proxy(socks.SOCKS5, '127.0.0.1', 10808)
6.socket.socket = socks.socksocket
7.try:
8. response = requests.get('http://httpbin.org/get')
9. print(response.text)
10.except requests.exceptions.ConnectionError as e:
11. print('Error', e.args)
Selenium
Selenium 也可以设置代理,在设置方法上分有无界面的浏览器两种方法,因此对于有界面浏览器,将以 Chrome 为例介绍;而对于无界面浏览器,以 PhantomJS 为例介绍。
1.Chrome
对于 Chrome 来说,用 Selenium 设置代理的方法也非常简单,设置方法如下:
1.from selenium import webdriver
2.
3.proxy = '127.0.0.1:10809'
4.chrome_options = webdriver.ChromeOptions()
5.chrome_options.add_argument('--proxy-server=http://' + proxy)
6.browser = webdriver.Chrome(chrome_options=chrome_options)
7.browser.get('http://httpbin.org/get')
2.PhantomJS
对于 PhantomJS,代理设置方法可以借助于 service_args 参数,也就是命令行参数;在这里我们只需要使用 service_args 参数,将命令行的一些参数定义为列表,在初始化的时候传递即可。
因此,代理设置方法如下:
1.from selenium import webdriver
2.
3.service_args = [
4. '--proxy=127.0.0.1:10809',
5. '--proxy-type=http'
6.]
7.browser = webdriver.PhantomJS(service_args=service_args)
8.browser.get('http://httpbin.org/get')
9.print(browser.page_source)
如果需要认证,那么只需要再加入 –proxy-auth 选项即可,这样参数就改为:
1.service_args = [
2. '--proxy=127.0.0.1:10809',
3. '--proxy-type=http',
4. '--proxy-auth=username:password'
5.]
将 username 和 password 替换为认证所需的用户名和密码即可。
关于(爬虫中的代理技术)的分享就介绍到这里,感谢您花时间阅读内容,想要了解更多信息可以上(h.shanchendaili.com)闪臣http咨询喔!
本文来源转载
原文链接:爬虫中的代理技术_通过vmess 设置python代理_DC_lullaby的博客-CSDN博客
若有侵权,请联系作者及时删除,谢谢!!