首页 / 爬虫 / Python爬虫常用小技巧之设置代理IP
Python爬虫常用小技巧之设置代理IP
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python爬虫常用小技巧之设置代理IP,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2590字,纯文字阅读大概需要4分钟。
内容图文
![Python爬虫常用小技巧之设置代理IP](/upload/InfoBanner/zyjiaocheng/844/14e4a632dd6543f88eb9095e0450c915.jpg)
当我们使用Python爬虫对一个网站进行爬取的时候,一般都会频繁的对该网站进行访问。假设一个网站可以检测到在某一个时间段内,某个IP地址的访问次数,如果该IP地址还是在某一个时间段内继续访问没并且访问次数远远超过正常用户的访问次数状况,那么该网站就会禁止该IP地址继续进行访问。所以,这个时候你就可以设置一些代理服务器来帮助你做工作,每次访问时间过长或者事访问频率特别高的时候,你就换一个IP代理,这样就不会出现因为频繁访问而导致禁止访问的现象。
我们在学习Python爬虫的时候,也经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败。高强度、高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,所以下面这篇文章讲述一个爬虫技巧,设置代理IP
这里介绍一款代理IP,犀牛代理,直接提取就可是使用
配置环境
- 安装requests库
- 安装bs4库
- 安装lxml库
具体代码
话不多说直接上代码吧
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
from bs4? import BeautifulSoup
import requests
import random
def get_ip_list(url, headers):
? web_data? = requests.get(url, headers = headers)
? soup? = BeautifulSoup(web_data.text,? 'lxml' )
? ips? = soup.find_all( 'tr' )
? ip_list? = []
? for i? in range ( 1 ,? len (ips)):
?? ip_info? = ips[i]
?? tds? = ip_info.find_all( 'td' )
?? ip_list.append(tds[ 1 ].text? + ':' + tds[ 2 ].text)
? return ip_list
def get_random_ip(ip_list):
? proxy_list? = []
? for ip? in ip_list:
?? proxy_list.append( 'http://' + ip)
? proxy_ip? = random.choice(proxy_list)
? proxies? = { 'http' : proxy_ip}
? return proxies
if __name__? = = '__main__' :
? url? = 'http://www.xicidaili.com/nn/'
? headers? = {
? 'User-Agent' :? 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17'
? }
? ip_list? = get_ip_list(url, headers = headers)
? proxies? = get_random_ip(ip_list)
? print (proxies)
|
函数get_ip_list(url, headers)传入url和headers,最后返回一个IP列表,列表的元素类似122.114.31.177:808格式,这个列表包括国内髙匿代理IP网站首页所有IP地址和端口
函数get_random_ip(ip_list)传入第一个函数得到的列表,返回一个随机的proxies,这个proxies可以传入到requests的get方法中,这样就可以做到每次运行都使用不同的IP访问被爬取的网站,有效地避免了真实IP被封的风险
proxies的格式是一个字典: {‘http': ‘http://122.114.31.177:808‘}?
,可以将下面的执行也封装为方法
对于抓取IP这个,西刺代理的服务器做了反爬处理,如果你频繁去抓取的话,服务器会主动返回503错误,提示block,所以在请求的时候可以先一次请求完保存一个文件,来读取这个文件,或者爬取一个ip使用几分钟后,再去爬取一次,相当于加一个定时功能
代理IP的使用
运行上面的代码会得到一个随机的proxies,把它直接传入requests的get方法中即可
?1 |
res? = requests.get(url, headers = headers, proxies = proxies)
|
内容总结
以上是互联网集市为您收集整理的Python爬虫常用小技巧之设置代理IP全部内容,希望文章能够帮你解决Python爬虫常用小技巧之设置代理IP所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。