很多朋友对于一步步一起学习爬虫,创建爬虫代理池和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
以前做Java开发,经常把一些常用的数据放在ArrayList中,使用起来非常方便高效。因此,我借鉴了之前Java的经验,爬取了代理IP并将其存储在列表中。将列表视为代理池并经常维护该池中的代理。
我经常爬免费代理网站xicidaili
swei360等,这些免费代理足够我使用,可以处理大部分爬虫工作。爬行过程需要requests 和pyquery 库。没有安装的同学可以自行安装。
首先我们来介绍一下喜鹊丽网站的爬取流程。
你首先要定义一个方法来爬取喜词代利网站。有两个参数,一是URL,二是要爬取的代理网页的页数,即爬取多少个页面。方法如下:
def get_xicidaili_proxy(url,page): for i in range(1,page): headers={ ‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML,如Gecko) Chrome/58.0 .3029.110 Safari/537.36 SE 2.X MetaSr 1.0’} 响应=requests.get(url + str(i), headers=headers) html=response.text doc=pq(html) ip_list=doc(‘#ip_list’) (‘tr:gt(0)’).items() for ip_list: 中的项目ip=item.find(‘td:nth-child(2)’).text() port=item.find(‘td:nth-child(3)’) .text() http_type=item.find(‘td:nth-child(6)’).text() proxy_ip=http_type + ‘://’ + ip + ‘:’ + 端口如果http_type==’HTTP’: http_proxy_pool。 append(proxy_ip) elif http_type==’HTTPS’: https_proxy_pool.append(proxy_ip) # print(proxy_ip) 定义了两个列表变量http_proxy_pool 和https_proxy_pool,用于存储http 类型和https 类型代理。使用PyQuery根据css伪选择器提取ip、端口和http类型信息,按照http://+ip+port的方式组合成字符串,存储到定义的http_proxy_tool和https_proxy_pool变量中。
爬取swei360网站代理的方法我就不贴出来了。原理和爬取喜词代利网站是一样的。
在使用代理之前,需要判断其是否可用。我们通过get请求的返回码来判断代理是否可用。返回200表示代理可用。返回其他代码表示代理不可用。代码如下:
def detector_proxy(test_url,http_type,proxy): headers={ ‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML,如Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2. X Metasr 1.0 ‘} Proxy={http_type : Proxy} Try: Response=Requests.get(test_url, proxies=Headers=Headers) US_Code in [200] : Print(‘代理可用’, proxy) Return true else: print(‘代理不可用可用’,代理); delete_proxy(http_type,proxy) return False except(requests.exceptions.ProxyError,RequestException): print(‘Proxy not available’, proxy) delete_proxy(http_type, proxy) return False Defined detector_proxy 方法用于检测代理是否可用。它有三个参数,即测试URL、代理类型(http 和https)和代理IP。当requests请求返回200代码时,表示代理可用,返回True。否则不可用,返回False。当遇到请求异常或者其他错误时,认为代理不可用,返回False。不可用的代理将从代理池中删除。
当从代理池获取代理时,我们使用代理池中的随机代理,以避免频繁使用代理而被拒绝访问。代码如下:
def get_https_proxy(): proxy_ip=random.choice(https_proxy_pool) return proxy_ip def get_http_proxy(): proxy_ip=random.choice(http_proxy_pool) return proxy_ip 为了保证代理的可用性,当检测到代理不可用时,必须及时清理。只需从http_proxy_pool 和https_proxy_pool 列表中删除它即可。
一个简单的爬虫代理池就搭建完成了。我们总结一下爬虫代理池的搭建过程:
从免费代理网站抓取代理信息并将其存储在列表中。提供从代理池中随机获取代理的方法。 http类型网站需要使用http类型代理,https类型网站需要使用https类型代理,因此分别提供了获取http和https类型代理的方法。提供检测代理是否可用的方法。如果代理可用,则返回True,如果不可用,则返回False。提供删除代理的方法。这个代理池其实很简单。一个缺点是,在检查代理是否可用时,如果返回的代码不是200,则认为代理不可用。返回其他代码的情况有很多,比如网络不可用、测试网站无法访问等。比较好的做法是给每个代理设置一个分数,比如10。如果检测到不可用,则减去1、当评分为0时,判定该坐席不可用,直接从坐席池中移除。如果检测到代理可用,则分数设置为10 分。这种方法为每个被检测到不可用的代理提供了纠正其错误的机会,而不是全面丢弃它们。
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/154234.html
用户评论
爱你的小笨蛋
爬虫代理一直是我的痛点,这篇文章讲得太详细了!感觉真的能直接上手实践,我现在就开始跟着做一遍。
有10位网友表示赞同!
致命伤
终于找到一篇详细讲解爬虫代理池的教程了!很多文章都是些浅尝辄止的介绍,这篇写的深入又清晰,很有用!
有7位网友表示赞同!
权诈
说起来这个爬虫代理池啊,我还真不是太了解,这个标题吸引我了,看起来还是挺专业的,打算认真学习一下。
有15位网友表示赞同!
余温散尽ぺ
现在很多网站都采取了防爬机制,想要获取数据不容易,所以爬虫代理就显得非常重要啦!正好我最近在研究爬虫项目,这篇教程很有帮助!
有6位网友表示赞同!
葵雨
感觉文章写的太简略了,没有详细解释一些关键技术点,比如代理池的维护和管理,以及面对高并发请求时的策略。这部分内容还是有待加强的地方。
有8位网友表示赞同!
绝版女子
我之前自己尝试过搭建爬虫代理池,结果很多都是不可用代理IP,浪费了很多时间和精力。这篇教程看起来讲解比较周到,希望能解决这个问题。
有7位网友表示赞同!
肆忌
爬虫代理确实好用,可以提升爬取效率,绕过一些限制。但这篇文章的代码示例写的过于复杂,对于初学者来说还是有点难懂。希望作者能提供更基础的版本
有19位网友表示赞同!
话扎心
说“一步一步打造”,感觉太夸张了。爬虫代理池可不是那么容易弄出来的,需要考虑很多因素和细节,这篇文章只是表面文章,还不够深入。
有17位网友表示赞同!
∞◆暯小萱◆
其实有很多现成的爬虫代理池可以使用,不需要自己搭建,这样省时省力。这篇教程好像不太实用,我更推荐大家直接使用成熟的平台服务。
有7位网友表示赞同!
墨城烟柳
学习一下爬虫代理池总是没错的,掌握了这个技能以后可以更好地利用爬虫技术完成一些数据采集的任务,对未来发展很有帮助。
有5位网友表示赞同!
哽咽
现在做一些数据分析项目,都需要用到爬虫工具获取数据,而爬虫代理池就能提高爬取效率和安全性。这篇文章太赞了!我会好好收藏起来学习!
有13位网友表示赞同!
你tm的滚
这个标题看起来很吸引人,我最近就需要自己搭建一个代理池,正好来试试看这篇教程的效果再决定是否使用它!
有19位网友表示赞同!
搞搞嗎妹妹
我觉得很多情况下爬虫代理的风险还是比较大的,因为它的安全性比较差,容易被黑客攻击。 建议大家谨慎使用,并做好相应的防护措施。
有8位网友表示赞同!
青瓷清茶倾城歌
我有一个想法,能不能结合机器学习来实现动态调整代理池的分配策略,这样可以更有效地提高爬取效率!也许这篇文章可以提供一些启发。
有13位网友表示赞同!
七夏i
这个爬虫代理池搭建起来真的太复杂了,需要懂很多网络协议和编程知识,我感觉还是适合有一定开发经验的人学习吧。对于新手来说可能会比较困难。
有17位网友表示赞同!
断秋风
感觉作者对爬虫技术的理解很深刻,能把一些复杂的知识点讲得通俗易懂,这篇文章让我受益匪浅!
有7位网友表示赞同!
颓废人士
做数据挖掘和研究工作的时候经常用到爬虫代理池,这篇教程讲解的非常到位!特别是关于代理IP检测和更换策略部分,让我学到了很多新的知识。
有20位网友表示赞同!