为什么Python爬虫对一个网站一发请求就被封ip?

最近试着爬一个网站,只要一对这个网站用request请求,网站立马封ip,这是怎么回事,是网站太严了还是代码的问题,代码如下,新手爬虫

from lxml import etree

import requests

if __name__ == "__main__":

url = "********************"

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49",

}

response = requests.get(url, headers).text #content

print(response)
阅读 2k
2 个回答

由于你的url被模糊了,所以我无法判断你想爬取的网址具体情况是否是怎样的。因此,我从爬虫机制常见的安全角度谈一谈。
首先,网站可能会允许爬取内容,比如知名的是中国天气网,这类网站通常会作为一些信息技术,爬虫或者安全教材里的案例实践。
当然绝大部分是不允许爬取内容的,涉及到一个版权违规甚至是违法的问题,举个最直观的例子,“国内最先进的技术社区之一”:思否技术社区,没错,也就是我们现在交流的这个网站里。所以技术探讨要符合规范,法律。不要越界。
R-C.jpg
聊完法律规范,再聊这段代码本身的问题,爬虫的设计思路一般是先通过浏览器模拟正常访问,能否成功获取到想要的数据,再进行代码爬取。因此,可以尝试加入代理、更改 User-Agent、添加请求间隔等反爬虫措施

import requests
import random
import time

url = "**********"

user_agents_list = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36",
]

proxies_list = [
    {
        "http": "http://127.0.0.1:1080",
        "https": "http://127.0.0.1:1080",
    },
    {
        "http": "http://127.0.0.1:1081",
        "https": "http://127.0.0.1:1081",
    },
    # more proxies here
]

for i in range(3):
    try:
        user_agent = random.choice(user_agents_list)
        proxies = random.choice(proxies_list)

        headers = {
            "User-Agent": user_agent,
        }

        response = requests.get(url, headers=headers, proxies=proxies, timeout=5)

        print(response.text)

        time.sleep(random.uniform(0.5, 3)) # 请求间隔时间,随机取 0.5 至 3 秒之间的值

    except requests.exceptions.RequestException as e:
        print(e)
        print("Connection failed, retrying...")
        time.sleep(random.uniform(1, 3)) # 连接失败时候重试间隔时间,随机取 1 至 3 秒之间的值

这里的代理和 user-agent 只是单纯的示例,如果你有更可靠的代理池和 user-agent 池,可以使用更高质量的代理和 user-agent 来避免被反爬虫策略封禁。

反爬机制导致的。

使用 devtools,尽可能模仿用户从浏览器访问时候会携带的东西。如果爬取量很大,要么降低爬取频率,要么使用 IP 池。

任何网站的反爬策略都会尽量不影响正常用户的访问。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题