如何通过urllib库获取网页?

问题描述 投票:0回答:1

该网页可以在我的浏览器中打开。

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获取网页?

python-3.x urllib3
1个回答
1
投票

根据 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)
© www.soinside.com 2019 - 2024. All rights reserved.