刷量、爬虫等用户通常通过代理ip来突破限制,爬虫代理IP一般采集一次或者多次就会更换ip,如局域网对上网用户的端口、目的网站、协议、游戏、即时通讯软件等的限制,网站对于IP的访问频率、访问次数的限制等;另一方面,通过代理也可以隐藏用户的真实身份,访问一些不希望对方知道你IP的服务器,爬取一些数据等等。

那么问题来了,使用代理就一定可以隐藏用户的真实身份吗?其实不然,代理IP分为三种:透明代理,普通匿名代理,高级匿名代理。

(1) 透明代理

在透明代理中,代理服务器将客户端的信息转发至目标访问对象,并没有完全隐藏客户端真实的身份。即服务器知道客户端使用了代理IP,并且知道客户端的真实IP地址。

(2) 普通匿名代理

在普通匿名代理中,代理服务器用自己的IP代替了客户端的真实IP,但是告诉了目标访问对象这是代理访问。

(3) 高匿代理

在高匿代理中,代理服务器良好地伪装了客户端,不但用一个随机的IP代替了客户端的IP,也隐藏了代理信息,服务器不会察觉到客户端是通过代理实现访问的,即用户仿佛就是直接使用代理服务器作为自己的客户端。

服务器是如何识别客户端是否使用了代理IP呢?

通常,服务器通过获取HTTPRequest的头部信息的相关字段来判断客户端是否使用了代理。该字段包括REMOTE_ADDR、HTTP_VIA、HTTP_X_FORWARDED_FOR等。

1、透明代理(Transparent Proxy)

REMOTE_ADDR = Proxy IP

HTTP_VIA = Proxy IP

HTTP_X_FORWARDED_FOR = Your IP

2、普通匿名代理(Anonymous Proxy)

REMOTE_ADDR = proxy IP

HTTP_VIA = proxy IP

HTTP_X_FORWARDED_FOR = proxy IP

3、高匿代理(Elite proxy或High Anonymity Proxy)

REMOTE_ADDR = Proxy IP

HTTP_VIA = not determined

HTTP_X_FORWARDED_FOR = not determined

固安捷手机端商品信息的爬取:

一、类目信息爬取

分析网站,找到类别的接口,POST请求接口返回数据,观察层级结构,发现共有三级类目,则依次爬取类目信息。分为类目名称、类目对应的categoryCode,以及类目的链接(链接为固定链接与categoryCode拼接而成),以及层级数和各个级别类目的父级。

二、列表页的爬取

找到网站列表信息的接口链接,同样是POST请求方式请求列表接口。注意:请求接口是需要配置荷载参数。注意几个关键的参数值。一个是pages总页数,categoryCode类别编码,pageNo当前页数。通过当前页数与总页数的判断大小,来实现翻页,通过累加俩实现翻页数据的爬取。爬取字段包括商品编码,商品名称,商品链接。目前爬取15万条左右。

三、详情页

找到网站商品详情信息的接口链接,同样是POST请求方式请求详情接口。同样配置荷载,关键参数就是商品编码。一个商品编码的sku中存在一个spu的存在,就需要爬取spu中的所有的sku信息。返回数据,发现spu信息存在于字典items中,循环遍历信息得到商品信息。另外外加一个字典信息main_html(商品长图),update到之前字典中,一并存入到MongoDB数据库中。

问题:出现了反爬。每当详情信息爬取到几万条后就出现403报错,发现出现了反爬机制,通过配置headers发现不能解决问题。最后只能通过使用ip代理来实现爬取。

通过在文件middlewares.py编写代码。

import requests,random
from datetime import datetimeclass ProxyMiddleware(object):def getIP(self):a = requests.get("芝麻代理IP ").json().get('data')  #芝麻代理IP  b = []for i in a:IP = i.get("ip")PORT = i.get("port")IP_PROT = str(IP) + ":" + str(PORT)Expire_time = int(i.get("expire_time").split(" ")[1].replace(":", ""))now_time = int(str(datetime.now()).split('.')[0].split(" ")[1].replace(":", ""))if Expire_time < now_time:b.append(IP_PROT)h = len(b)if h != 0:num = random.randint(0, h - 1)c = b[num]thisProxy = {"https": "https://{}".format(c)}m = thisProxy.get('https')return mdef process_request(self, request,spider):a=self.getIP()request.meta['proxy'] = a

在setings.py中设置

DOWNLOADER_MIDDLEWARES = {# 'GuanjieSpider.middlewares.ProxyMiddleware': 543,
}

即可运行

Scrapy爬虫代理IP的使用相关推荐

  1. 爬虫日记(29):随机更换scrapy的代理IP地址

    前面学习了怎么样验证代理IP地址的有效性,这样就可以通过代理池的数据库来进行筛选出有效的IP地址出来.接着就可以利用这些代理IP地址进行随机更换,达到模拟不同人员访问同一个网站的目的.那么我们怎么样才 ...

  2. selenium+python设置爬虫代理IP

    selenium+python设置爬虫代理IP 1. 背景 在使用selenium浏览器渲染技术,爬取网站信息时,一般来说,速度是很慢的.而且一般需要用到这种技术爬取的网站,反爬技术都比较厉害,对IP ...

  3. scrapy爬虫-代理设置

    scrapy爬虫-代理设置 1.请求头User-Agent代理设置** 1.1 找到middlewares.py 1.2 找到一个绑定的DownloaderMiddlewar(生成scrapy爬虫目录 ...

  4. python—简单数据抓取七(采取蘑菇API代理设置scrapy的代理IP池并利用redis形成队列依次使用,利用ip池访问网页并将scrapy爬取转移到items的数据存入到数据库)

    学习目标: Python学习二十七-简单数据抓取七 学习内容: 1.采取蘑菇API代理设置scrapy的代理IP池并利用redis形成队列依次使用 2.利用ip池访问网页并将scrapy爬取转移到it ...

  5. python 代理ip池_GitHub - xuan525/proxy_pool: Python爬虫代理IP池(proxy pool)

    ProxyPool 爬虫代理IP池 ______ ______ _ | ___ \_ | ___ \ | | | |_/ / \__ __ __ _ __ _ | |_/ /___ ___ | | | ...

  6. 获得代理ippython_Python爬虫代理IP从哪里获取?

    如今代理ip被大家广泛使用,尤其是在爬虫工作中,相信许多做分布式深网爬虫的开发者对代理IP非常熟悉.面对网站千变万化的反爬虫策略,代理IP对爬虫工作帮助极大,这点爬虫人员深有体会.很多初学者刚开始入门 ...

  7. 选择爬虫代理IP的重要性

    选择爬虫代理IP的重要性 中国互联网整体发展时间短,中国的互联网发展速度无疑是众国家中最快的一个.随着时间的变化大数据网络时代高速运行,给互联网行业带来了不少的利润和改变.爬虫作者作为大数据的数据来源 ...

  8. python3之爬虫代理IP的使用+建立代理IP池

    爬虫代理IP的使用+建立代理IP池 代理`IP`的使用 建立代理`IP`池 完整代码 代理IP的使用 先了解一下百度百科定义的IP 为什么要使用代理IP? 反爬(反网络爬虫) 示例: 测试网址 htt ...

  9. Linux + ProxyPool 搭建属于爬虫代理IP池

    前言: 当爬虫达到一定速度时,大家都会遇到封Ip的情况,而搭建代理ip池是解决的最好方法,网络上有很多优秀的付费代理,但是作为白嫖党的我们又怎么能付钱那,本文将教会大家用一个成熟的开源项目搭建代理池. ...

  10. 如何建立爬虫代理ip池

    目录 一.为什么需要建立爬虫代理ip池 二.如何建立一个爬虫代理ip池 原文地址:https://www.cnblogs.com/TurboWay/p/8172246.html 一.为什么需要建立爬虫 ...

最新文章

  1. 微生物组-扩增子16S分析第12期(报名直播课免费参加线下2021.7)
  2. 外网无法访问hdfs文件系统
  3. 脑电分析系列[MNE-Python-15]| Epochs数据可视化
  4. Java中的Set操作
  5. HTTP的四种请求方法
  6. MCtalk 创业声音丨辉禹科技合伙人孔杰:投资和创业都是思维的放大器
  7. 专注于分布式存储计算技术及其应用url http://www.nosqlnotes.net/
  8. python分词与去停用词简单实操
  9. 计算机网络应用班级口号霸气押韵,跑操口号大全(精选50句)
  10. android gprs工作流程,Android pppd_gprs脚本启动过程
  11. android实现自动评论脚本,自动点击器评论器app下载
  12. java实现用用户头像代替小程序码的logo(任意图片替换小程序码logo)
  13. 微信小程序产品定位及功能介绍
  14. 【战神引擎】一键打开所有修改路径快捷方式
  15. hive计算指定日期所在周的第一天和最后一天
  16. 从程序员到项目经理(21):谁都需要成就感
  17. 对于自我的反省 - 对底层人民认知产生的商业思考
  18. Mina 粘包、断包、半包解决
  19. Luogu 4844 LJJ爱数数
  20. 【洛谷】P1001 A+B Problem

热门文章

  1. 无法访问https://element.eleme.cn和https://element.eleme.io
  2. 413 Arithmetic Slices
  3. 共议新时代的文化自信与守正创新,第十四届文化中国讲坛举办
  4. Exchange2013中POP3和IMAP4
  5. 桌面我的计算机图标,让桌面显示我的电脑或者我的计算机图标
  6. SNAT/DNAT/MASQUERADE
  7. 图画日记怎么画_画画提高的一个方法: 绘画日记!
  8. 知识图谱-知识体系与知识融合-实体消歧
  9. 直连网线和交叉网线的线序
  10. Vue element table按钮实现当行expand详情(右箭头)