簡體   English   中英

HTTP錯誤403:禁止/嘗試抓取Google

[英]HTTP Error 403: Forbidden /try to crawling google

我想在Google中自動搜索公司信息。 請如下所示查看我的代碼。 HTTP錯誤403:禁止或HTTP錯誤404:禁止發生。

from urllib.request import urlopen
from bs4 import BeautifulSoup
from urllib import parse
import openpyxl


wd = openpyxl.load_workbook('C:/Users/Lee Jung 
Un/Documents/hopeyouwork.xlsx')#locate of excel file.
ws = wd.active

def bs(Eng_name):
    url = "https://www.google.co.kr/search?ei=hWEaW-bKEMnb8QWa1IrQDw&q="
    q = parse.quote(Eng_name)
    html = urlopen(url + q)
    bsObj = BeautifulSoup(html, "html.parser")
    twg = bsObj.select("div.ifM9O > div:nth-child(2) > div.kp-header > div > 
    div.DI6Ufb > div > div > div.d1rFIf > div.kno-ecr-pt.kno-fb-ctx > span")

    if bool(twg):
        return twg.text    
    else:
        info = "none"
        return info


def companyname():
    for r in ws.rows:
        row_index = r[0].row
        Eng_name = r[1].value
        Kor_name = bs(Eng_name)
        ws.cell(row=row_index, column=1).value = row_index
        ws.cell(row=row_index, column=2).value = Eng_name
        ws.cell(row=row_index, column=3).value = Kor_name
        wd.save("Done.xlsx")
    wd.close()

 companyname()

嘗試設置User-Agent HTTP標頭 許多Web服務器都禁止使用流行的編程庫的默認User-Agent字符串,以避免由漫游器引起的濫用。

還請記住,Google中也有其他限制,例如您可以執行的查詢數量限制。 在某些時候,如果查詢過多,您可能會看到驗證碼,甚至被禁止從IP進行進一步查詢。

如果是這種情況,您可能需要閱讀其文檔,並認為某些功能可能不是免費的。

您可能已被Google屏蔽。 查看您是否仍可以從瀏覽器訪問URL。 您需要在標頭中添加user agent ,並在每個URL請求之間延遲,如果長時間被阻止,則可能通過代理連接。

我可以建議使用基於urllib構建的requests包,並在編碼時提供更好的靈活性。

例如:

headers = {
    'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) '
                  'Gecko/20100101 Firefox/61.0'),
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
}

## proxies is optional

ip = 'blah-blah'
port = 'blah'

proxies = {"http": 'http://' + ip + ':' + port,
           "https": 'http://' + ip + ':' + port}

html = requests.get(url, headers=headers, proxies=proxies)

添加延遲##

time.sleep(number)

def companyname():
    for r in ws.rows:
        row_index = r[0].row
        Eng_name = r[1].value
        Kor_name = bs(Eng_name)

        #add delay after each crawl
        time.sleep(5) #sleeps for 5 seconds

        ws.cell(row=row_index, column=1).value = row_index
        ws.cell(row=row_index, column=2).value = Eng_name
        ws.cell(row=row_index, column=3).value = Kor_name
        wd.save("Done.xlsx")
    wd.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM