使用python通过我的个人服务器调用网页抓取时出错

问题描述

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

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)访问信息时,程序都会关闭。我不喜欢将我的用户代理用于公共域的想法,但是当公共域需要用户代理时,我无法找出其他网络抓取者如何解决这个问题。有什么建议!?

解决方法

我会添加一些随机标题来轮换,而不是我自己的标题。这样的事情应该可以工作:

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,'html.parser')
fv_ticker_title = soup_fv.find('title')
print(fv_ticker_title)

实际上取决于您是否要使用库...