该网页可以在我的浏览器中打开。
https://www.sec.gov/files/company_tickers_exchange.json
添加浏览器用户代理何时使用 urllib 获取网页:
from urllib.request import Request, urlopen
url = "https://www.sec.gov/files/company_tickers_exchange.json"
req = Request(
url=url,
headers={'User-Agent': 'Mozilla/5.0'}
)
webpage = urlopen(req).read()
遇到错误:
urllib.error.HTTPError: HTTP Error 403: Forbidden
虽然我可以得到剧作家的网页:
from playwright.sync_api import sync_playwright as playwright
pw = playwright().start()
browser = pw.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
url = "https://www.sec.gov/files/company_tickers_exchange.json"
page.goto(url)
page.content()
我觉得这个方法很笨拙,如何只用urllib获取网页?
根据 SEC.gov 的公平准入部分判断 |访问 EDGAR 数据,从非浏览器客户端传递正常的浏览器标头(正如您尝试做的那样)可能会得到否定响应:
请在请求标头中声明您的用户代理:
声明的机器人请求标头示例:
[标题] [数值] 用户代理: 公司名称示例 [电子邮件受保护] 接受编码: gzip、放气 主持人: www.sec.gov
听从这个建议似乎很有效 在我对 Repl.it 的测试中:
from urllib.request import Request, urlopen
url = "https://www.sec.gov/files/company_tickers_exchange.json"
req = Request(
url=url,
headers={'User-Agent': 'Sean Quinn [email protected]'}
)
webpage = urlopen(req).read()
print(webpage)