【问题标题】:Error when web scraping is called through my personal server with python使用 python 通过我的个人服务器调用网络抓取时出错
【发布时间】:2021-04-22 22:52:18
【问题描述】:

我是编码新手,并且已经完成了一个简单的程序,可以在网络上抓取一些股票网站以获取特定数据。简化后的代码如下所示:

headers = {'User-Agent': 'Personal_User_Agent'}

fv = f"https://finviz.com/quote.ashx?t=JAGX"

r_fv = requests.get(fv, headers=headers)
soup_fv = BeautifulSoup(r_fv.text, 'html.parser')
fv_ticker_title = soup_fv.find('title')
print(fv_ticker_title)

在我创建用户代理之前,该网站无法运行,但后来它运行良好。然后我通过 python 的本地主机创建了一个网站,它也运行良好,所以我认为我已经准备好通过“python 任何地方”将网站公开。

但是,当我去创建公共网站时,每次我通过网络抓取(即使用 user_agent)访问信息时,程序都会关闭。我不喜欢将我的用户代理用于公共领域的想法,但是当公共领域需要用户代理时,我不知道其他网络抓取的人如何解决这个问题。有什么建议!?

【问题讨论】:

    标签: python html web-scraping error-handling user-agent


    【解决方案1】:

    我会添加一些随机标题来旋转,而不是我自己的标题。像这样的东西应该可以工作:

    import random
    
    header_list = [
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_18_3) AppleWebKit/537.34 (KHTML, like Gecko) Chrome/82.0.412.92 Safari/539.36',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 11.12; rv:87.0) Gecko/20170102 Firefox/78.0',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.32 (KHTML, like Gecko) Chrome/82.0.12.17 Safari/535.42'
    ]
    
    fv = f"https://finviz.com/quote.ashx?t=JAGX"
    
    user_agent = random.choice(header_list)
    headers = {'User-Agent': user_agent}
    
    r_fv = requests.get(fv, headers=headers)
    soup_fv = BeautifulSoup(r_fv.text, 'html.parser')
    fv_ticker_title = soup_fv.find('title')
    print(fv_ticker_title)
    

    或选项 2。

    使用一个名为 fake-headers 的库来生成它们:

    from fake_headers import Headers
    
    fv = f"https://finviz.com/quote.ashx?t=JAGX"
        
    headers = Headers(os="mac", headers=True).generate() 
    
    r_fv = requests.get(fv, headers=headers)
    soup_fv = BeautifulSoup(r_fv.text, 'html.parser')
    fv_ticker_title = soup_fv.find('title')
    print(fv_ticker_title)
    

    真的取决于你是否要使用库......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多