知行编程网知行编程网  2022-01-23 17:41 知行编程网 隐藏边栏 |   抢沙发  22 
文章评分 0 次,平均分 0.0

首先要知道什么情况下需要使用代理

正如第一节讲到了一些反爬策略,有些网站不希望被频繁爬取。如果咱们的爬虫程序被监测到(访问频率或者访问次数过大),那么爬虫程序相应的IP就会被网站封掉。一旦IP被封那就意味着一段时间内无法运行爬虫程序了。

该如何解决这一问题呢?

这个时候就需要用代理IP了,它能够帮助我们隐藏自己真实IP的同时也可以连续不断的运行爬虫程序,不用担心IP被封。

什么是代理IP:代理服务器可以理解成一个中转站。介于浏览器和服务器中间的一台服务器,Requests会将请求先发送到代理服务器中,然后代理服务器获取Web服务器返回的数据再传递给浏览器

提供代理IP的网站有哪些?

代理IP有免费的和收费的。相比之前收费的更加稳定和可靠,当然也有一些免费的代理,不过总体上来讲质量就比较低,如果只是个人学习使用,直接白嫖免费的就可以了。

常用的代理网站有

  • 快代理(https://www.kuaidaili.com/free/inha/)
  • goubanjia(http://www.goubanjia.com/)

代理的匿名度区别:

爬虫系列 | 8、Python爬虫中的代理与代理池

  • 透明:目标服务器知道该请求使用了代理,同时也知道使用代理的真实IP
  • 匿名:目标服务器知道使用了代理,但是不知道真实IP
  • 高匿:目标服务器不知道使用了代理,更不知道真实IP

如何使用代理

我们在百度中搜索ip,就是现实我们电脑的ip并且显示对应的地址

爬虫系列 | 8、Python爬虫中的代理与代理池

所以我们可以通过爬虫获取这个页面,来判断代理是否生效

在requests中加入代理的方式也很简单,只需要设置proxies参数即可。

免费的ip,高匿的试了好多没有能用的。最后斥巨资5元买了6个小时的代理。

 requests

# 代理IP
proxies = {
'https''117.69.99.20:20138',
'http''125.116.31.85:45002'
}
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}

url = 'https://www.baidu.com/s?wd=ip'

response = requests.get(url, headers=headers, proxies=proxies)

with open('proxy.html''w', encoding='utf-8'as f:
f.write(response.text)

执行之后,打开生成的HTML文件。发现此时检测到的IP就是我们代码中用的代理IP

爬虫系列 | 8、Python爬虫中的代理与代理池

代理池

为了方便爬虫代理IP的频繁切换,我们需要维护一批代理功我们使用,也就是代理池。

我们可以选择自己维护一个免费的代理池

  • 采集网络上发布的免费代理。
  • 对代理定时进行验证,保证可用性
  • 持久化存储

付费购买的代理,每次或者间隔一小段时间之后,重新获取代理进行爬取即可。一般付费购买的都有相应的开发文档供大家进行参考

在GitHub上有这样一个开源项目ProxyPool,为我们提供了一个简易高效的代理池。

简易高效的代理池,提供如下功能:

  • 定时抓取免费代理网站,简易可扩展。
  • 使用 Redis 对代理进行存储并对代理可用性进行排序。
  • 定时测试和筛选,剔除不可用代理,留下可用代理。
  • 提供代理 API,随机取用测试通过的可用代理。

关于如何运行和启动项目,大家直接看readme文档即可

https://github.com/Python3WebSpider/ProxyPool

在执行爬虫程序时,可以通过以下方法从代理池中获取代理IP

 requests

proxypool_url = 'http://127.0.0.1:5555/random'
target_url = 'http://httpbin.org/get'

def get_random_proxy():
"""
get random proxy from proxypool
:return: proxy
"""

return requests.get(proxypool_url).text.strip()

def crawl(url, proxy):
"""
use proxy to crawl page
:param url: page url
:param proxy: proxy, such as 8.8.8.8:8888
:return: html
"""

proxies = {'http''http://' + proxy}
return requests.get(url, proxies=proxies).text

def main():
"""
main method, entry point
:return: none
"""

proxy = get_random_proxy()
print('get random proxy', proxy)
html = crawl(target_url, proxy)
print(html)

if __name__ == '__main__':
main()

 

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享