如何在不被阻止的情况下抓取网站?
How to crawl websites without getting blocked?
我经常以每小时数百个请求的速度抓取网站。
- 如何让爬虫的行为更像人?
- 如何不被检测机器人发现?
目前正在使用 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 是否暴露。
我经常以每小时数百个请求的速度抓取网站。
- 如何让爬虫的行为更像人?
- 如何不被检测机器人发现?
目前正在使用 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 是否暴露。