Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >IP代理在网络爬虫中的应用

IP代理在网络爬虫中的应用

作者头像
生信修炼手册
发布于 2020-11-02 02:33:31
发布于 2020-11-02 02:33:31
45200
代码可运行
举报
文章被收录于专栏:生信修炼手册生信修炼手册
运行总次数:0
代码可运行

欢迎关注”生信修炼手册”!

通过用户代理我们可以将普通的爬虫程序伪装成浏览器,而IP代理的作用则是用于突破目标服务器对同一IP访问频率的限制。

在网站的反爬虫策略中,限制IP访问频率是比较常见的措施。具体体现为,当我们的爬虫程序短时间内对服务器发起大量请求时,会出现访问限制或者IP被封禁的现象,此时无论是爬虫程序,还是通过浏览器访问,都无法访问到目标服务器。

为了突破这一限制,可以使用IP代理。IP是互联网中的门牌号,IP代理的作用就是将我们的爬虫程序伪装成不同的用户,这样就避免了对同一个用户访问频率的限制。在python中,通过urllib和requests这两个模块都实现IP代理。

1. urllib

代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> proxy="http://119.8.44.244:8080"
>>> proxy_support=urllib.request.ProxyHandler({'http':proxy})
>>> opener = urllib.request.build_opener(proxy_support)
>>> urllib.request.install_opener(opener)
>>> r = urllib.request.urlopen('http://icanhazip.com')
>>> r.read()
b'119.8.44.244\n'

2. requests

代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import requests
>>> proxies = {'http': 'http://119.8.44.244:8080'}
>>> r=requests.get("http://icanhazip.com", proxies=proxies)
>>> r.text
'119.8.44.244\n'

上述代码中的目标网站是一个检测IP的网站,当我们成功访问后,会显示对应的IP地址,从而帮助我们判断代理IP是否生效。

可以看到,相对于urllib,requests模块的代理IP使用起来更加简单。

在实际应用中,既有免费的代理IP,也有收费的代理IP。免费的代理IP需要我们从对应的网站上爬取IP列表,然后还需要自己检测代理IP的有效性,而通常情况下,免费的代理IP有效性都很低,所以更推荐使用收费的代理IP。

收费的代理IP会提供一个API借口,可以方便的嵌入程序中,通过API调用直接返回一系列可用的代理IP。

通过一个例子来看下代理IP的使用,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import requests
import random
import threading


# 获取代理IP
def get_proxy():
    ip_list = [
        'http://197.231.196.44:42461',
        'http://190.124.164.78:8080',
        'http://87.117.169.23:48705',
    ]
    return random.choice(ip_list)



# 下载单个网页
def getHtml(url, proxy):
    retry_count = 5
    while retry_count > 0:
        try:
            html = requests.get(url, proxies= {'http':proxy})
            return html
        except Exception:
            retry_count -= 1
    return None


# 每个线程的处理逻辑
def download_html(ko, semaphore, proxy):
    semaphore.acquire()
    url = 'https://www.genome.jp/dbget-bin/www_bget?ko:{}'.format(ko)
    out = './{}.kgml'.format(ko)
    r = getHtml(url, proxy)
    if r:
        print('{} download success!'.format(ko))
        with open(out, 'w') as fp:
            fp.write(r.text)
    else:
      print('{} download failed!'.format(ko))
    semaphore.release()

if __name__ == '__main__':
    ko_list = ['K{:05d}'.format(i) for i in range(1, 201)]

    thread_list = []
    semaphore = threading.BoundedSemaphore(100)
    for cnt, ko in enumerate(ko_list):
        if cnt % 10 == 0:
            proxy = get_proxy()
        p = threading.Thread(target = download_html, args = (ko, semaphore, proxy ))
        p.start()
        thread_list.append(p)
        
    for thread in thread_list:
        thread.join()

程序的作用是抓取KEGG Orthology的各个网页,通过多线程实现抓取,通过代理IP的使用,可以突破IP频率的限制。

需要注意,代理IP是有时效性的,代码中的IP是我在网上找到的免费代理IP, 当前测试是没问题的,但是过段时间代理IP失效之后,就没法成功运行了。

上述的代码只是用于启发式的思考,在实际使用中,用收费代理的API来实现get_proxy函数即可。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

更多精彩

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[719]python检测代理IP是否有效
经测试,发现存在以下问题: 虽然代理无效,也会返回一个网页,但不是百度,其内容大于5000,因此存在bug。
周小董
2020/01/13
2.2K0
代理可用性测试及使用
代理(Proxy)是指在网络通信中充当中间人的服务器,它接收客户端发送的请求,然后向服务器发送请求,获取响应后再将响应返回给客户端。代理服务器通常用于隐藏客户端的真实IP地址,提高安全性、访问速度等方面的需求。
叶子Tenney
2023/04/04
1.1K0
代理可用性测试及使用
pythonrequests代理ip_python使用requests模块使用ip代理池
proxy_url = “https://raw.githubusercontent.com/fate0/proxylist/master/proxy.list”
全栈程序员站长
2022/09/01
7080
[代码与实例] 爬虫 爬ooxx图 嘿嘿
在这里还是要推荐下我自己建的 Python学习群:721195303,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入! **以下内容无用,为本篇博客被搜索引擎抓取使用 (* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄) python 是干什么的 零基础学 python 要多久 python 为什么叫爬虫 python 爬虫菜鸟教程 python 爬虫万能代码 python 爬虫怎么挣钱 python 基础教程 网络爬虫 python python 爬虫经典例子 python 爬虫 (* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)( ̄︶ ̄)( ̄︶ ̄) 以上内容无用,为本篇博客被搜索引擎抓取使用
全栈程序员站长
2022/11/04
3290
进击的爬虫:用Python搭建匿名代理池
專 欄 ❈ 苍冥,Python中文社区专栏作者,澳洲华裔,目前在墨尔本某国际咨询公司任职Splunk Developer,擅长网络安全及攻防,热爱Python及爬虫,同时在学习Machine Learning。 邮箱:e0t3rx@gmail.com Github:github.com/eastrd ❈—— 01 写在前面 常听到很多人抱怨自己的IP因爬虫次数太多而被网站屏蔽,不得不频繁使用各种代理IP,却又因为网上的公开代理大部分都是不能使用,而又要花钱花精力去申请VIP代理,几番波折
Python中文社区
2018/01/31
1.3K0
VII Python(7)爬虫
urllib和urllib2模块(python2.*分urllib和urllib2;python3..4.1中把urllib和urllib2合并统一为一个包package,注意版本3是包不是模块);
py3study
2020/01/07
4440
python: 抓取免费代理ip
通过抓取西刺网免费代理ip实现代理爬虫: from bs4 import BeautifulSoup import requests import random import telnetlib requests = requests.session() ip_list = [] proxy_list = [] headers = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0',
py3study
2020/01/06
1.5K0
python3爬虫-通过requests
import requests from fake_useragent import UserAgent from lxml import etree from urllib.parse import urljoin import pymysql import time ua = UserAgent() class MyException(Exception): def __init__(self, status, msg): self.status = status
py3study
2020/01/16
3950
python爬虫遇到IP被封的情况,怎么办?
代理服务的介绍: 我们在做爬虫的过程中经常最初爬虫都正常运行,正常爬取数据,一切看起来都是美好,然而一杯茶的功夫就出现了错误。 如:403 Forbidden错误,“您的IP访问频率太高”错误,或者跳出一个验证码让我们输入,之后解封,但过一会又出现类似情况。 出现这个现象的原因是因为网站采取了一些反爬中措施,如:服务器检测IP在单位时间内请求次数超过某个阀值导致,称为封IP。 为了解决此类问题,代理就派上了用场,如:代理软件、付费代理、ADSL拨号代理,以帮助爬虫脱离封IP的苦海。 测试HTTP请求及响应的
python学习教程
2019/11/01
4.3K0
python爬虫遇到IP被封的情况,怎么办?
打造免费代理IP池
爬虫的过程中,当对方服务器发现你屡次爬取它,可能会遇到被封IP的苦痛,这时IP就应该换啦,打造IP池的意义十分重要,提供免费IP网站有很多,本次用的是西刺代理IP
用户3577892
2020/06/12
1.4K0
Python入门网络爬虫之精华版
首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:宁哥的小站-网络爬虫
IT派
2018/08/10
1.2K0
爬取IP代理偷偷给文章刷阅读量一、前言二、代码三、小结
原本是想开始维护IP代理池,继续python爬虫进阶之路,但在看其他人写的IP代理爬取的文章时,发现可以把爬下来的IP用来给CSDN博客里的文章刷阅读量,于是就刷了1k+的阅读量......
古柳_DesertsX
2018/08/21
9080
爬取IP代理偷偷给文章刷阅读量一、前言二、代码三、小结
Python:爬虫使用代理ip
最近在爬某网站的时候,最开始网站不封ip 或者说 站长没有管这方面 就一直使用本地的ip,然后就导致ip被拉黑了 我能怎么办,我也很无奈呀。只好给爬虫加个代理ip咯
wo.
2021/06/15
1.5K0
爬虫中的代理问题
最近身边很多人都遇到爬虫中的代理问题,写下这篇博客来记录自己所学,希望可以帮助到你们。
K同学啊
2019/01/22
1K0
反爬虫和反反爬虫(上篇)
公众号爬取今日头条的那一期,不少小伙伴反应爬取下来的图片无法查看或者爬取不了,小詹也重新试了下,的确是的,写那篇推文的时候,头条还比较友好,没有添加反爬措施,大概是爬取的朋友太多,对其造成了极大的压力吧,添加了某些反爬技术,然而,上有政策,下有对策,粉丝群有小伙伴改写了程序并添加了反反爬策略进行了妹子的爬取~
小小詹同学
2018/07/24
3.7K0
反爬虫和反反爬虫(上篇)
[1277]使用隧道代理保持IP临时不变和切换IP
隧道转发代理: 简单来说每秒新建http请求,每个http请求随机分配一个代理IP,每个IP有效时间20秒。毕竟是随机分配的,每个http请求分配的代理IP都不一样,那如何保持每个http请求是同一个IP?
周小董
2024/05/02
3350
[1277]使用隧道代理保持IP临时不变和切换IP
Squid代理服务器搭建亿级爬虫IP代理池
做爬虫抓取时,我们经常会碰到网站针对IP地址封锁的反爬虫策略。但只要有大量可用的IP资源,问题自然迎刃而解。
我被狗咬了
2019/09/23
4.2K1
Python3网络爬虫(四):使用User Agent和代理IP隐藏身份
本文介绍了如何利用Python的requests库和BeautifulSoup库,对给定的网页进行抓取,获取到网页中的一些信息,并对这些信息进行解析和处理。具体实现包括利用requests库发起HTTP请求,获取到网页的HTML内容;利用BeautifulSoup库对HTML内容进行解析,提取出所需的信息;以及对提取的信息进行格式化处理。最后,介绍了如何使用代理IP池和自定义User-Agent池来对爬虫程序进行伪装,避免被网站发现。
Jack_Cui
2018/01/08
2.3K0
Python3网络爬虫(四):使用User Agent和代理IP隐藏身份
Python爬虫HTTP代理使用教程
Python爬虫实战教程里怎么使用HTTP代理。我需要整理一下搜索结果里的信息,然后分步骤说明。
华科云商小徐
2025/04/01
1790
用Python多线程抓取并验证代理
最后,为了提高效率,最好是使用多线程。(PS,有个地方要注意,urlopen这个函数,设定了一个全局对象opener,所以如果你使用了多个线程, 每个线程使用一个代理,那么,不能使用urlopen这个函数,而应该使用opener.open)
艳艳代码杂货店
2021/11/01
4980
相关推荐
[719]python检测代理IP是否有效
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验