爬虫笔记38之反爬系列一:ip反爬、

1、遇到的问题:使用爬虫在爬取数据的时候,如果爬取的频率过快,或者是一些其它的原因,被对方网站识别出来是爬虫程序,这个时候我们的IP就会被面临封杀的危险,一旦IP被封了之后,我们的爬虫程序就无法去爬取该网站资源了。

​2、如何解决?
使用代理IP

免费的ip网站 :推荐豌豆代理 ,每天20个免费的(但不一定都能用)
​付费的ip网站:推荐快代理,价格便宜一些。

3、关于2个ip的说明
(1)内网ip:即我们在cmd里输入ipconfig 得到:
在这里插入图片描述
(2)外网ip:我们可以在网站http://httpbin.org/ip查看到:
在这里插入图片描述
4、我们所说的是外网ip可能被封。
在这里插入图片描述
一、ip反爬
1、免费的代理ip
在这里插入图片描述
在这里插入图片描述
在上图中就有20个免费的代理ip,一个一个的试:
在这里插入图片描述
结果20个都不行。

2、付费的代理IP(https://www.kuaidaili.com/pricing/)
在这里插入图片描述
独享代理和私密代理需要该网站的登录用户名和密码
​语法:proxies = {‘协议’:‘协议://用户名:密码@ip:端口号’}
在这里插入图片描述

(1)独享代理
在这里插入图片描述
结果:
在这里插入图片描述
(2)开放代理:
在这里插入图片描述
在这里插入图片描述
代码:
在这里插入图片描述

import requests

class Proxy:
    def __init__(self):
        self.proxy_url = 'http://dev.kdlapi.com/api/getproxy/?orderid=992520441312817&num=20&protocol=2&method=1&an_ha=1&sep=2'
        self.test_url = 'https://www.baidu.com/'
        self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'}

    def get_proxy(self):
        html = requests.get(url=self.proxy_url,headers=self.headers).text
        proxy_list = html.split('\n')
        for proxy in proxy_list:
            self.text_proxy(proxy)

    def text_proxy(self,proxy):     # 测试开放代理是否可用
        proxies = {
            'http': '{}'.format(proxy),
            'https': '{}'.format(proxy)}
        try:
            res = requests.get(url=self.test_url,proxies=proxies,headers=self.headers,timeout=2)
            if res.status_code == 200:
                print(proxy,'能用')
        except Exception as e:
            print(proxy,'不能用')

    def main(self):
        self.get_proxy()
        
if __name__ == '__main__':
    spider = Proxy()
    spider.main()

结果:
在这里插入图片描述
(3)私密代理:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import requests

class Proxy:
    def __init__(self):
        self.proxy_url = 'http://dps.kdlapi.com/api/getdps/?orderid=982520462433055&num=20&pt=1&sep=2'
        self.test_url = 'https://www.baidu.com/'
        self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'}

    def get_proxy(self):
        html = requests.get(url=self.proxy_url,headers=self.headers).text
        proxy_list = html.split('\n')
        for proxy in proxy_list:
            self.text_proxy(proxy)

    def text_proxy(self,proxy): # 测试开放代理
        # 'http':'http://192149641:1ts5t50q@47.108.189.170:16816',账户名和密码
        proxies = {
            'http': 'http://192149641:1ts5t50q@{}'.format(proxy),
            'https': 'https://192149641:1ts5t50q@{}'.format(proxy)}
        try:
            res = requests.get(url=self.test_url,proxies=proxies,headers=self.headers,timeout=2)
            if res.status_code == 200:
                print(proxy,'能用')
        except Exception as e:
            print(proxy,'不能用')
            
    def main(self):
        self.get_proxy()

if __name__ == '__main__':
    spider = Proxy()
    spider.main()

结果:
在这里插入图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值