【python】使用代理进行爬虫

174 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天,点击查看活动详情 >>

前言

本文包含两部分内容,part1为如何使用代理进行爬取内容,part2为如何检测代理是否有效,废话不多说我们现在开始

使用代理

在爬虫时我们常遇到ip被封的情况,很多网站都有一些反爬机制防止爬虫恶意请求,我们使用的对策就是使用代理进行爬虫,使用代理相当于伪装了IP,就能防止IP被封禁的情况。

首先我们需要去找一个ip,此处我的方案是写了个爬取公开免费代理的脚本进行爬取代理并且检测是否能使用,如果额能使用则放Reidis中

proxies_ = {
    "http": 103.135.102.143:80  //随便写的使用不了
}

首先我们需要定义一个代理变量 当我们请求的时候将此变量一起带上

test = requests.get('http://www.baidu.com', proxies=proxies_)

此处我请求的是百度,这样就可以使用代理进行包装了

检测代理是否有效

当我们浏览器访问

http://httpbin.org/get

会返回一个json,里面的origin就是我们的请求ip

{
  "args": {}, 
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", 
    "Accept-Encoding": "gzip, deflate", 
    "Accept-Language": "zh-CN,zh;q=0.9", 
    "Cache-Control": "max-age=0", 
    "Host": "httpbin.org", 
    "Referer": "https://link.csdn.net/?target=http%3A%2F%2Fhttpbin.org%2Fget", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36", 
    "X-Amzn-Trace-Id": "Root=1-630f56a4-441d2eee51e0759f6b35d5b4"
  }, 
  "origin": "180.157.171.32", 
  "url": "http://httpbin.org/get"
}

当我们请求时发现返回ip与我们携带的ip相同那么就可以证明我们代理是有效的

try:
    for i in range(0,100):
        proxie = requests.get('http://127.0.0.1:10010/')
        respStr = json.loads(str(proxie.text))
        proxie.close()
        proxies_ = {
            "http": respStr["ip"]
        }
        print("respStr"+str(respStr))
        ip = ''
        test = requests.get('http://httpbin.org/get', proxies=proxies_)
        test.keep_alive = False
        print("0000"+str(test.text))
        print("1111"+str(test.status_code))
        time.sleep(5)
except Exception as e:
    print(e)

上文代码中,我的代理是通过本机跑的一个服务取到的,为了防止遇到一场服务挂断我添加了异常 。