使用Python的Google模块查询限制

4
我将从电子表格中提取大约10万个值,并获取前几个结果以查看它们是http还是https。这个脚本运行良好(对于我的目的而言足够好),但在循环的第70次迭代后,我会收到503错误。
您有任何想法/建议如何获取所需的查询量吗?
代码:
import pandas as pd
import re
import time
library_list = pd.read_csv("PLS_FY2014_AE_pupld14a.csv")

zero = 0
with_https = 0 

for i in library_list['LIBNAME']:
    for url in search(library_list['LIBNAME'][zero], num = 1, start = 0, stop = 1):
        time.sleep(5)
        zero += 1
        print(zero)
        if 'https' in url:
            with_https += 1

1
可能与此相关的信息是,进行连续和自动化查询后,Google搜索返回503错误,该错误在这个Google搜索帮助答案中有所提及"您的计算机网络存在异常流量" - chickity china chinese chicken
是的,我在这个问题上的最好解决方案是将time.sleep()函数的延时增加到大约20秒,但这会导致网页爬取速度非常慢。我希望有人已经找到了一种不会被阻止或违反服务条款的脚本创建方法。 - T.J.
1
当您遇到503错误时,您是否检查过是否有“错误页面最可能显示CAPTCHA”以进行身份验证,并允许脚本继续运行? - chickity china chinese chicken
2
好的,search 函数中还有一个 pause 参数(例如:search(query, tld='com', lang='en', num=10, start=0, stop=None, pause=2.0)),它可能会对暂停起到一定作用,但请注意文档中的说明:pause (float) - 在HTTP请求之间等待的时间间隔。间隔时间过长会导致搜索变慢,但间隔时间过短可能会导致Google封锁您的IP地址。具体情况可能有所不同! - chickity china chinese chicken
1
听起来不错,报告任何进展情况,祝你好运。 - chickity china chinese chicken
显示剩余9条评论
1个回答

6

我也在尝试做同样的事情,但是在获取30-50个结果后,我遇到了503错误。最终,我强制搜索在每次搜索之间等待30到60秒的随机时间。我读到其他人也遇到了同样的问题,他们说Google将机器人搜索限制在每小时约50次左右。我使用的代码是:

import os, arcpy, urllib, ssl, time, datetime, random, errno
from datetime import datetime
from arcpy import env
from distutils.dir_util import copy_tree
try:
    from google import search
except ImportError:
    print("No module named 'google' found")
from google import search
with arcpy.da.UpdateCursor(facilities, ["NAME", "Weblinks", "ADDRESSSTATECODE", "MP_TYPE"]) as rows:
    for row in rows:
        if row[1] is None:
            if row[3] != "xxxxxx":
                query = str(row[0])
                print("The query will be " + query)
                wt = random.uniform(30,60)
                print("Script will wait " + str(wt) + " seconds before the next search.")
                for j in search("recreation.gov " + query + ", " + str(row[2]), tld="co.in", num=1, stop=1, pause=wt):
                    row[1] = str(j)
                    rows.updateRow(row)
                    print(row[1])
                    time.sleep(5)
                    print("")

我的脚本已经连续运行了7天,没有出现错误。虽然速度可能有点慢,但最终它会完成任务。这一轮我正在使用它进行大约18,000次搜索。

谢谢!这证实了我也在想的事情。很好,我下周正好在度假,我会让它在我离开时运行。 - T.J.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接