首先要知道什么情况下需要使用代理
正如第一节讲到了一些反爬策略,有些网站不希望被频繁爬取。如果咱们的爬虫程序被监测到(访问频率或者访问次数过大),那么爬虫程序相应的IP就会被网站封掉。一旦IP被封那就意味着一段时间内无法运行爬虫程序了。
该如何解决这一问题呢?这个时候就需要用代理IP了,它能够帮助我们隐藏自己真实IP的同时也可以连续不断的运行爬虫程序,不用担心IP被封。
什么是代理IP:代理服务器可以理解成一个中转站。介于浏览器和服务器中间的一台服务器,Requests会将请求先发送到代理服务器中,然后代理服务器获取Web服务器返回的数据再传递给浏览器
提供代理IP的网站有哪些?代理IP有免费的和收费的。相比之前收费的更加稳定和可靠,当然也有一些免费的代理,不过总体上来讲质量就比较低,如果只是个人学习使用,直接白嫖免费的就可以了。
常用的代理网站有
快代理()goubanjia()代理的匿名度区别:
透明:目标服务器知道该请求使用了代理,同时也知道使用代理的真实IP匿名:目标服务器知道使用了代理,但是不知道真实IP高匿:目标服务器不知道使用了代理,更不知道真实IP如何使用代理我们在百度中搜索ip,就是现实我们电脑的ip并且显示对应的地址
所以我们可以通过爬虫获取这个页面,来判断代理是否生效
在requests中加入代理的方式也很简单,只需要设置proxies参数即可。
免费的ip,高匿的试了好多没有能用的。最后斥巨资5元买了6个小时的代理。
import requests# 代理IPproxies = { 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 = ?wd=ipresponse = requests.get(url, headers=headers, proxies=proxies)with open(proxy.html, w, encoding=utf-8) as f: f.write(response.text)执行之后,打开生成的HTML文件。发现此时检测到的IP就是我们代码中用的代理IP
代理池
为了方便爬虫代理IP的频繁切换,我们需要维护一批代理功我们使用,也就是代理池。
我们可以选择自己维护一个免费的代理池
采集网络上发布的免费代理。对代理定时进行验证,保证可用性持久化存储付费购买的代理,每次或者间隔一小段时间之后,重新获取代理进行爬取即可。一般付费购买的都有相应的开发文档供大家进行参考
在GitHub上有这样一个开源项目ProxyPool,为我们提供了一个简易高效的代理池。
简易高效的代理池,提供如下功能:
定时抓取免费代理网站,简易可扩展。使用 Redis 对代理进行存储并对代理可用性进行排序。定时测试和筛选,剔除不可用代理,留下可用代理。提供代理 API,随机取用测试通过的可用代理。关于如何运行和启动项目,大家直接看readme文档即可
在执行爬虫程序时,可以通过以下方法从代理池中获取代理IP
import requestsproxypool_url = :5555/randomtarget_url = http://httpbin.org/getdef 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).textdef 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、什么是爬虫,玩爬虫的正确姿势有哪些爬虫系列 | 2、Http请求和响应,写爬虫这些内容必须掌握爬虫系列 | 3、谷歌浏览器的基本使用爬虫系列 | 4、详解Requests的用法爬虫系列 | 5、详解爬虫中正则的用法爬虫系列 | 6、详解爬虫中BeautifulSoup4的用法爬虫系列 | 7、详解爬虫中Xpath的用法