【python爬虫】—爬虫报错:403访问太过频繁,禁止访问

@【python爬虫】—爬虫报错:403访问太过频繁,禁止访问


前言

使用requests包建立访问时,正常的访问状态会返回状态代码200,但是在爬一些网站时,经常会返回403(众所周知的404代表的是网站disappear了。而403代表我们当前的IP被forbidden了)。这是因为在短时间内直接使用Get获取大量数据,会被服务器认为在对它进行攻击,所以拒绝我们的请求,自动把电脑IP封了。
因此,这里介绍两种解决办法。


方案一、请求页面的是添加headers

我们平时使用浏览器下载的图片或者是文件的时候,不论怎么下载,都不会被封,但是我们仅仅是使用爬虫,怕取了几张图片或者是查看了一两个页面就被封IP了。
其根本原因是因为我们使用get方法请求的时候没有使用header,而浏览器在访问页面的时候使用了header,所以,基于这个浏览器的实现,我们只需要在get请求中添加上header就可以了。
先定义header,以备后面使用:

headers = {
	'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
} 

使用方式

import requests
import re
import time

headers = {
	'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
} 

def get_one_page(url):
	response = requests.get(url, headers = headers)
	if response.status_code == 200:
		return response.content.decode('utf-8')
	return None
def parse_one_page(html):
	pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>',re.S)
	items = re.findall(pattern, html)
	print(items)

def main():
	url = 'https://maoyan.com/board/4?offset=0'
	time.sleep(1)
	html = get_one_page(url)
	parse_one_page(html)
	print(html)

main()

这样一来,目标服务器,会把爬虫的请求认为是浏览器的请求,也就不会禁止爬虫的操作了。

方案二、使用代理解决

这个方法我想大家都知道,IP被封的原因就是因为访问太过频繁,所以可以一直更换IP,这样目标服务器就不会封禁你的请求:

# 免费代理IP不能保证永久有效,如果不能用可以更新
# http://www.goubanjia.com/
proxy_list = [
    '183.95.80.102:8080',
    '123.160.31.71:8080',
    '115.231.128.79:8080',
    '166.111.77.32:80',
    '43.240.138.31:8080',
    '218.201.98.196:3128'
]

使用方式

import requests
import re
import time

headers = {
	'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
} 
proxy_list = [
    '183.95.80.102:8080',
    '123.160.31.71:8080',
    '115.231.128.79:8080',
    '166.111.77.32:80',
    '43.240.138.31:8080',
    '218.201.98.196:3128'
]

def get_one_page(url):
	response = requests.get(url, proxies=proxy_list)
	if response.status_code == 200:
		return response.content.decode('utf-8')
	return None
def parse_one_page(html):
	pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>',re.S)
	items = re.findall(pattern, html)
	print(items)

def main():
	url = 'https://maoyan.com/board/4?offset=0'
	time.sleep(1)
	html = get_one_page(url)
	parse_one_page(html)
	print(html)

main()

总结

防止被封禁的方法还有设置延时,这种方法配合上面两种其中的一种会有更好的效果,当然了,一起使用都是没有问题的。

我是一个不专业的程序猿,欢迎一起交流。

当八爪鱼爬取数据时显示403,意味着服务器拒绝了对该网页的访问请求。HTTP状态码403表示禁止访问,通常是由于服务器的安全设置或访问权限限制导致的。这可能是因为网站管理员对爬虫程序进行了限制,或者您的爬取请求被视为异常或非法操作。要解决这个问题,您可以尝试以下几种方法: 1. 检查您的爬取程序是否遵守了网站的robots.txt文件中规定的爬取规则。robots.txt文件是网站管理员用于指导搜索引擎爬虫的文件,您可以查看其中的规则以确保您的爬取程序没有违反网站的规定。 2. 检查您的爬取程序是否发送了正确的User-Agent头部信息。有些网站会根据User-Agent来判断请求是否合法,您可以尝试修改User-Agent信息来模拟正常的浏览器请求。 3. 检查您的爬取频率是否过高,如果您发送了过多的请求,网站可能会将您的IP地址列入黑名单,导致403错误。您可以尝试减少爬取频率或者使用代理IP来进行爬取。 4. 如果您认为被误判了,请与网站管理员联系,说明您的爬取目的和需求,请求解除对您的访问限制。 需要注意的是,在进行网页数据爬取时,我们应该遵守法律法规和网站的使用规定,并且尊重网站的隐私权和版权。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [网页数据爬取方法详解 - 八爪鱼采集器](https://blog.csdn.net/weixin_39646107/article/details/117773994)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天边彩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值