对于经常做数据爬虫的程序员来说,除了要写出简洁方便的代码。还需要解决的是网站反爬的问题。有时候我们在爬取数据的时候突然报出错或者目标网站错误代码。

比如说:403 Forbidden错误,“您的IP访问频率太高”错误,或者跳出一个验证码让我们输入,之后解封,但过一会又出现类似情况。

这些问题的出现都是爬取的网站触发了反爬机制。意思就是说网站服务器检测到同一个ip下超多的请求数达到网站设置的阈值自动开启验证,说白了就是封了这个IP,可能过几个小时就解封,但是爬虫不可能等。

为了解决此类问题,爬虫ip就派上了用场,如:爬虫ip软件、付费爬虫ip、ADSL拨号爬虫ip,都可以有效的解决爬虫脱离封IP的苦海。

测试爬虫ip请求及响应的网站:http://www.baidu.com。

baidu这个网站能测试 HTTP 请求和响应的各种信息,比如 cookie、ip、headers 和登录验证等。

且支持 GET、POST 等多种方法,对 web 开发和测试很有帮助。

它用 Python + Flask 编写,是一个开源项目。

返回信息中origin的字段就是客户端的IP地址,即可判断是否成功伪装IP:

爬虫ip的设置:

1、urllib的爬虫ip设置

from urllib.error import URLError
from urllib.request import ProxyHandler, build_opener proxy = 'ip地址:端口'
#需要认证的爬虫ip #proxy = 'username:password@ip地址:端口' #使用ProxyHandler设置爬虫ip
proxy_handler = ProxyHandler({
'http': 'http://' + proxy,
'https': 'https://' + proxy
})
#传入参数创建Opener对象
opener = build_opener(proxy_handler)
try:
response = opener.open('http://www.baidu.com')
print(response.read().decode('utf-8'))
except URLError as e:
print(e.reason)

2、requests的爬虫ip设置

import requests

proxy = 'ip地址:端口'
#需要认证的爬虫ip
#proxy = 'username:password@ip地址:端口' proxies = {
'http': 'http://' + proxy,
'https': 'https://' + proxy,
}
try:
response = requests.get('http://www.baidu.com', proxies=proxies)
print(response.text)
except requests.exceptions.ConnectionError as e:
print('Error', e.args)

3、Selenium的爬虫ip使用

使用的是PhantomJS
from selenium import webdriver service_args = [
'--proxy=ip地址:端口',
'--proxy-type=http',
#'--proxy-auth=username:password' #带认证爬虫ip
] browser = webdriver.PhantomJS(service_args=service_args)
browser.get('http://www.baidu.com')
print(browser.page_source) 使用的是Chrome
from selenium import webdriver proxy = 'ip地址:端口'
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=http://' + proxy)
chrome = webdriver.Chrome(chrome_options=chrome_options)
chrome.get('http://www.baidu.com')

4、在Scrapy使用爬虫ip

#在Scrapy的Downloader Middleware中间件里
...
def process_request(self, request, spider):
request.meta['proxy'] = 'http://ip地址:端口'
...

免费爬虫ip的使用

import requests,random

#定义爬虫ip池
proxy_list = [
'182.39.6.245:38634',
'115.210.181.31:34301',
'123.161.152.38:23201',
'222.85.5.187:26675',
'123.161.152.31:23127',
] # 免费ip链接:http://jshk.com.cn/mb/reg.asp?kefu=xjy
# 随机选择一个爬虫ip
proxy = random.choice(proxy_list) proxies = {
'http': 'http://' + proxy,
'https': 'https://' + proxy,
}
try:
response = requests.get('http://www.baidu.com', proxies=proxies)
print(response.text)
except requests.exceptions.ConnectionError as e:
print('Error', e.args)

在requests中使用爬虫ip

import requests

# 从爬虫ip服务中获取一个爬虫ip
proxy = requests.get("http://jshk.com.cn").text
proxies = {
'http': 'http://' + proxy,
'https': 'https://' + proxy,
}
try:
response = requests.get('http://www.baidu.com', proxies=proxies)
print(response.text)
except requests.exceptions.ConnectionError as e:
print('Error', e.args)

Python爬虫iP被封的怎么办?的更多相关文章

  1. Python爬虫老是被封的解决方法【面试必问】

    在爬取的过程中难免发生 ip 被封和 403 错误等等,这都是网站检测出你是爬虫而进行反爬措施,在这里为大家总结一下 Python 爬虫动态 ip 代理防止被封的方法. PS:另外很多人在学习Pyth ...

  2. 避免网络爬虫IP被封的策略

    背景 这两天一直在搞Java网络爬虫作为Java课程设计,目标是爬取豆瓣电影top250的影评,之后可能还需要进行情感分析,当然这就不是爬虫的内容了.我的爬虫程序在一开始只是一个页面一个页面的爬取信息 ...

  3. 爬虫-IP被封解决办法

    方法1. 之前由于公司项目需要,采集过google地图数据,还有一些大型网站数据. 经验如下:1.IP必须需要,比如ADSL.如果有条件,其实可以跟机房多申请外网IP.2.在有外网IP的机器上,部署代 ...

  4. Python爬虫 | IP池的使用

    一.简介 - 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会禁止这个IP的访问.所以我们需 ...

  5. 设置python爬虫IP代理(urllib/requests模块)

    urllib模块设置代理 如果我们频繁用一个IP去爬取同一个网站的内容,很可能会被网站封杀IP.其中一种比较常见的方式就是设置代理IP from urllib import request proxy ...

  6. python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会

    我们上次说了伪装头部 ↓ python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部 让自己的 python 爬虫假装是浏览器 小帅b主要是想让你知道 在爬取网站的时候 ...

  7. Python爬虫教程-11-proxy代理IP,隐藏地址(猫眼电影)

    Python爬虫教程-11-proxy代理IP,隐藏地址(猫眼电影) ProxyHandler处理(代理服务器),使用代理IP,是爬虫的常用手段,通常使用UserAgent 伪装浏览器爬取仍然可能被网 ...

  8. Python爬虫突破封禁的6种常见方法

    转 Python爬虫突破封禁的6种常见方法 2016年08月17日 22:36:59 阅读数:37936 在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长.今天大众好像更倾向于用 ...

  9. Python爬虫常用小技巧之设置代理IP

    设置代理IP的原因 我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站.假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问.所以你可以设置一些代理服务器来 ...

  10. 爬虫的新手使用教程(python代理IP)

    前言 Python爬虫要经历爬虫.爬虫被限制.爬虫反限制的过程.当然后续还要网页爬虫限制优化,爬虫再反限制的一系列道高一尺魔高一丈的过程.爬虫的初级阶段,添加headers和ip代理可以解决很多问题. ...

随机推荐

  1. 认识JavaWeb

    JavaWeb Java Web 1.基本概念 1.1.前言 web开发: web,网页的意思 , www.baidu.com 静态web html,css 提供给所有人看的数据始终不会发生变化! 动 ...

  2. zabbix利用python3脚本进行钉钉报警

    1.新建脚本dingding.py内容如下   注意需要用unix格式  不然会报错/usr/bin/python3^M #!/usr/bin/python3import requestsimport ...

  3. git lock fail解决

    本地多个分支,remote .remote tracking.local checkout了2个不同版本分支,发现最后版本却是相同的,然后pull时报git lock fail, 看来发送了冲突了,删 ...

  4. 头条二面:宕机后,Redis如何实现快速恢复?

    Redis作为非常火热的内存数据库,其除了具有非常高的性能之外,还需要保证高可用,在故障发生时,尽可能地降低故障带来的影响,Redis也提供了完善的故障恢复机制:哨兵.下面就来具体来看看Redis的故 ...

  5. [CSP-S2019] Emiya 家今天的饭

    洛咕 题意:原题面见链接,简单来说就是给出一个\(n*m\)的矩阵,每一行代表同一种烹饪方法,每一列代表同一种食材,\(a_{i,j}\)表示使用第i种烹饪方法第j种食材能做出多少种菜,要求至少做一道 ...

  6. linux 服务器 重命名

    vim /etc/hosts 追加 10.10.134.68 RmcbTestDB3 RmcbTestDB3               # ip  名称 名称 127.0.0.1 localhost ...

  7. SAP 内外交货单过账

    * 交货单过账  DATA:  LS_HEADER_DATA           TYPE BAPIIBDLVHDRCON,              LS_HEADER_CONTROL   TYPE ...

  8. vulnhub:My_Tomcat_Host靶机

    kali:192.168.111.111 靶机:192.168.111.171 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --script=http-enum 192.168. ...

  9. Onur Mutlu 18-447 Lecture9 分支预测-1

    =============== 第一部分:branch prediction =========== 1. 最简单的分支预测:总是预测下一条指令的地址在 PC+4 如何让这种分支预测更加有效呢? Id ...

  10. 在centons7系统部署一套单master的k8s集群

    架构图: 操作系统:CentOS Linux release 7.7.1908 (Core) docker:docker-ce-20.10.14-3.el7.x86_64 kubernetes: 1. ...