如何在不被阻止的情况下抓取网站?

How to crawl websites without getting blocked?

我经常以每小时数百个请求的速度抓取网站。

  1. 如何让爬虫的行为更像人?
  2. 如何不被检测机器人发现?

目前正在使用 selenium 抓取网站,chrome。

请多多指教。

网站可以通过多种方式检测您是否试图抓取它们。最简单的可能是IP。如果您从同一 IP 发出请求的速度太快,您可能会被阻止。您可以在脚本中引入(随机)延迟,以尝试让脚本看起来更慢。

要继续尽可能快,您将不得不使用不同的 IP 地址。您可以使用许多代理和 VPN 服务来完成此操作。

嗯,您必须在循环之间暂停脚本。

import time
time.sleep(1)
time.sleep(N)

所以,假设它可以像这样工作。

import json,urllib.request
import requests
import pandas as pd
from string import ascii_lowercase
import time

alldata = []
for c in ascii_lowercase:
    response = requests.get('https://reservia.viarail.ca/GetStations.aspx?q=' + c)
    json_data = response.text.encode('utf-8', 'ignore') 
    df = pd.DataFrame(json.loads(json_data), columns=['sc', 'sn', 'pv'])  # etc., 
    time.sleep(3)
    alldata.append(df)

或者,查找 API 以从您的目标 URL 获取数据。您没有 post 实际的 URL,因此无法确定 API 是否暴露。