美文网首页
Python爬虫代理

Python爬虫代理

作者: 熊定坤 | 来源:发表于2018-08-14 22:17 被阅读0次
为什么使用代理

在爬取网站信息的过程中,有些网站为了防止爬虫,可能会限制每个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

相关文章

  • 爬虫代理池的设置

    下面介绍一段python爬虫的代理池

  • 【Python - 爬虫】爬虫代理

    设置 urllib 设置代理 Requests 设置代理 selenium 设置代理 获取免费IP 参考链接 Py...

  • 职位分析APP Python爬虫 + Python后台 + An

    个人独自开发项目 工作分析APP 用到的技术 Python requests 爬虫 IP代理 Python Dja...

  • 第七章 反爬虫机制

    反爬虫机制 标签(空格分隔): python scrapy scrapy 架构 useragent 用户代理切换 ...

  • Python爬虫代理

    为什么使用代理 在爬取网站信息的过程中,有些网站为了防止爬虫,可能会限制每个ip的访问速度或访问次数。对于限制访问...

  • Python代理爬虫

    工作原理 : 基于爬虫对网络上免费的代理公布站进行抓取和分析 , 并将最近的结果保存在本地文件中 , 等待验证 ,...

  • python爬虫代理

    一 爬虫为什么要设置代理? 写爬虫,大家都知道,抓的网站和数据多了,如果爬虫抓取速度过快,免不了触发网站的防爬机制...

  • python爬虫-05-python爬虫代理,python爬虫如

    1、python爬虫代理 使用python爬虫高频率的访问一个固定的网站的话,容易触发该目的网站的反爬机制,将你对...

  • docekr使用proxy_pool和redis

    proxy_pool是Python爬虫代理IP池(proxy pool) 项目Github地址:https://g...

  • python requests使用

    参考python爬虫---requests库的用法 基本的get请求: 各种请求方式: 带参数、头部、代理

网友评论

      本文标题:Python爬虫代理

      本文链接:https://www.haomeiwen.com/subject/rcfvbftx.html