现在互联网技术发展进步,各种数据集中在互联网上,数据信息采集不再是手动采集,现在都是一些爬虫程序爬虫软件去采集想要的数据信息,虽然网络爬虫的确可以采集到信息,但是在采集信息的时候我们经常会遇到一些问题:一些数据明明在网站上能够显示但是自己的程序抓取不出来;有些网站设置了限制,避无可避;自己已经做好了前期的准备工作,但是自己的请求被拒绝了
由于网站服务器对ip地址的限制,没有办法访问和采集该网页。这时候就需要对自己的程序需要针对网站做一些相应的修改,当然每个网站的限制不同,修改的策略也不同;每个网站网站设置了防爬虫程序,就是不想让你采集信息,自然你就找不到自己被拒绝的原因了。细想原因,其实很容易理解,自己辛辛苦苦写的文章写的数据,被别人给全部拿走,自己心里肯定是不舒服的,所以自然要设置一些防抓取程序。
如果自己会做程序,那么可以自己写一个代理ip程序,定时从各种免费代理ip网站中抓取免费代理ip,但是这样也有很多不足之处,一方面是因为开发和维护需要技术基础和精力基础,另一方面是现在市面上很多的代理ip都不稳定。如果想要获取更多稳定的代理ip,还是要需要找一些大型的服务商。
对于网站的限制可以使用隧道转发的爬虫代理加强版的代理的方式访问目标站点:降低抓取频率,时间设置长一些,访问时间采用随机数,随机访问然后抓取数据;更换用户IP,这是最直接有效的方法!
#! -*- encoding:utf-8 -*-
import base64
import sys
import random
PY3 = sys.version_info[0] >= 3
def base64ify(bytes_or_str):
if PY3 and isinstance(bytes_or_str, str):
input_bytes = bytes_or_str.encode('utf8')
else:
input_bytes = bytes_or_str
output_bytes = base64.urlsafe_b64encode(input_bytes)
if PY3:
return output_bytes.decode('ascii')
else:
return output_bytes
class ProxyMiddleware(object):
def process_request(self, request, spider):
# 代理服务器(产品官网 www.16yun.cn)
proxyHost = "t.16yun.cn"
proxyPort = "31111"
# 代理验证信息
proxyUser = "username"
proxyPass = "password"
request.meta['proxy'] = "http://{0}:{1}".format(proxyHost,proxyPort)
# 添加验证头
encoded_user_pass = base64ify(proxyUser + ":" + proxyPass)
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
# 设置IP切换头(根据需求)
tunnel = random.randint(1,10000)
request.headers['Proxy-Tunnel'] = str(tunnel)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有