Python爬虫代理

为什么使用代理

在爬取网站信息的过程中,有些网站为了防止爬虫,可能会限制每个ip的访问速度或访问次数。对于限制访问速度的情况,我们可以通过time.sleep进行短暂休眠后再次爬取。对于限制ip访问次数的时候我们需要通过代理ip轮换去访问目标网址。

从哪里获取代理IP

付费获取代理IP,或者通过爬取免费代理的网站网站获取代理IP,有如下可以免费获取代理IP的网站
快代理代理66有代理西刺代理guobanjia国内高匿代理IP

如何保证代理质量

由于免费代理IP大部分不能用,所以采集回来的代理IP不能直接使用,可以写检测程序不断的去用这些代理访问一个稳定的网站,看是否可以正常使用。这个过程可以使用多线程或异步的方式,因为检测代理是个很慢的过程。

基本流程

1.从代理网站爬取代理IP(本次爬取国内高匿代理,网址https://link.jianshu.com/?t=http%3A%2F%2Fwww.xicidaili.com%2Fnn%2F
2.将爬取的代理IP保存至本地txt文档
3.遍历文档,用代理IP访问常用网址剔除不可用和质量低的代理IP

  • 使用多线程爬取高匿代理前10页的代理IP并保存至桌面ip_list.txt文档
import threading
import os
import requests
from bs4 import BeautifulSoup
import re 
def get_proxy(num):
    os.chdir(r'C:\Users\Administrator\Desktop')
    f = open('ip_list.txt','a',encoding='utf-8')
    urls = ['http://www.xicidaili.com/nn/%i' %i for i in range(num+1)] 
    headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
    for url in urls:
        response = requests.get(url,headers = headers)
        soup = BeautifulSoup(response.text,"lxml")
        ip_info = soup.find_all('tr',class_='odd')
        try:
            for i in ip_info:
                ip = i.find_all('td')[1].text
                port = i.find_all('td')[2].text
                proxy = ip + ':' + port +'\n' 
                f.write(proxy)
        except Exception as e:
            print('NO IP')
    f.close()
t = threading.Thread(target=get_proxy,args=(10,))
t.start()
t.join()
  • 对保存至桌面文档的代理IP进行测试,将测试能够达到要求的ip添加至proxys_list列表
proxys_list = []
def test_proxy():
    os.chdir(r'C:\Users\Administrator\Desktop')
    f = open('ip_list.txt','r',encoding='utf-8')
    pros = f.readlines()
    url = 'https://www.baidu.com/'
    headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
    for pro in pros:
        proxy = ('http://'+ pro).strip('\n')
        proxies = {'proxy':proxy}
        print(proxies)
        try:
            response = requests.get(url,headers = headers,proxies = proxies)
        except Exception as e:
            pass
        else:
            code = response.status_code
            if code >= 200 and code < 300:
                proxys_list.append(proxies)
            else:
                continue
    return(proxys_list)
t2 = threading.Thread(target=test_proxy)
t2.start()
t2.join()
有没有构建好的代理池

有,项目地址

ProxyPool

项目说明文档

如何构建一个代理池

代理池流程

安装Python

至少Python3.5以上

安装Redis

安装好之后将Redis服务开启

配置代理池

cd proxypool

进入proxypool目录,修改settings.py文件

PASSWORD为Redis密码,如果为空,则设置为None

安装依赖

pip3 install -r requirements.txt

打开代理池和API

python3 run.py

获取代理

利用requests获取方法如下

import requests

PROXY_POOL_URL = 'http://localhost:5555/random'

def get_proxy():
    try:
        response = requests.get(PROXY_POOL_URL)
        if response.status_code == 200:
            return response.text
    except ConnectionError:
        return None
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 地址:https://github.com/Python3WebSpider/ProxyPool 为什么需要代理池...
    造数科技阅读 13,366评论 3 18
  • 设计思想: 一、具体网站具体对待,请求成功与否与网站的差异很大: 相同的代理不同的网站的会给予不同的反馈,有的网站...
    sexy_cyber阅读 2,910评论 0 0
  • 一 爬虫为什么要设置代理? 写爬虫,大家都知道,抓的网站和数据多了,如果爬虫抓取速度过快,免不了触发网站的防爬机制...
    志明S阅读 14,169评论 7 40
  • 最近工作比较忙,也就没有看python了,今天下午抽空看了下代理ip 查看自己的IP可以访问地址http://ww...
    Fitz916阅读 4,728评论 0 5
  • 早晨醒来的时候,又想起了我的母亲,母亲走了半月有余,竟然一次也没有走进我的梦中,“想见音容云万里,思听教诲月三更”...
    西岭布衣阅读 5,309评论 1 4

友情链接更多精彩内容