【发布时间】:2022-01-21 21:45:48
【问题描述】:
我正在执行一些测试以了解如何有效地执行网络报废。 我在本地 Python 环境中开发了一些运行良好的脚本:
ssl._create_default_https_context = ssl._create_unverified_context
header = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) '
'AppleWebKit/537.11 (KHTML, like Gecko) '
'Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive'}
req = urllib.request.Request(url=url_page, headers=header)
page = urllib.request.urlopen(req) # If timeout is addded, entire execution is
soup = BeautifulSoup(page, 'html.parser', multi_valued_attributes=None)
return soup
但是,当在 AWS Lamba 中部署相同的代码(相同的库,相同的环境)时,结果会有所不同,因为我尝试废弃的页面的 HTML 不完整(我想废弃的部分没了)。
我也尝试在本地环境中执行简单的 curl,并且能够获取完整的网页(使用以前的标头),但是当我尝试仅从 AWS Lambda 下载页面 HTML 时 (as cURL is no longer available in Lambda) :
page = urllib.request.urlopen(req)
file_test = "/tmp/test1.html"
with open(file_test, "w") as file1:
file1.write(str(page.read()))
client = s3_management.get_s3_client()
client.upload_file(file_test, "bucket", file_test)
我得到一个不完整的 HTML 版本。
无奈之下,我也尝试过使用 aiohttp 库(带有 asyncio)而不是 urlib.request 来实现异步请求,但结果是一样的:一个不完整的 HTML 页面和与我在本地环境中执行代码时看到的版本不同。
有什么想法吗?
【问题讨论】:
标签: python amazon-web-services web-scraping python-requests