HTTP错误403:禁止/尝试抓取谷歌

时间:2018-06-08 12:23:24

标签: python beautifulsoup urllib openpyxl

我想在谷歌中自动搜索公司信息。 请参阅下面的代码。 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()

2 个答案:

答案 0 :(得分:0)

Try setting the User-Agent HTTP header。许多网络服务器禁止使用流行编程库的默认用户代理字符串,以避免机器人滥用。

另请注意,Google也有其他限制,例如您可能执行的查询数量限制。在某些时候,如果您查询过多,您可能会看到CAPTCHA甚至被禁止进一步查询来自IP。

如果是这种情况,您可能需要阅读他们的文档并考虑某些功能可能不是免费的。

答案 1 :(得分:0)

您可能已被谷歌屏蔽了。 看看您是否仍然可以从浏览器访问URL。您需要在标头中添加LOAD CSV WITH HEADERS FROM "file:///dump.csv" AS row MERGE (a:Person {name:row.person1Name}) MERGE(b:Person {name:row.person2Name}) FOREACH (t in CASE WHEN NOT EXISTS((a)-[*]->(b)) THEN [1] ELSE [] END | MERGE (a)-[pr:Managed]->(b)) 并在每个网址请求之间延迟,如果长时间阻止,可以通过代理连接。

我建议使用构建在user agent之上的requests包,并在编码时提供更好的灵活性。

前:

urllib

添加延迟##

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)