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

时间:2019-05-17 12:20:47

标签: selenium web-crawler google-crawlers

我经常以一个小时内数百个请求的速度爬网网站。

  1. 如何使爬行者的行为更像人类?
  2. 如何不被检测机器人抢走?

当前使用硒,铬的网站。

请提出建议。

2 个答案:

答案 0 :(得分:0)

网站可以通过多种方式检测到您试图对其进行爬网。最简单的可能是IP。如果从同一IP发出请求的速度过快,则可能会被阻止。您可以在脚本中引入(随机)延迟,以使其变慢。

要继续快速运行,您将不得不使用其他IP地址。您可以使用许多代理和VPN服务来完成此任务。

答案 1 :(得分:0)

好吧,您将不得不在循环之间暂停脚本。

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中获取数据。您没有发布实际的URL,因此无法确定是否公开了API。