Python 无法使用AIOHTTPClientSession获取网页
我想使用asyncio来获取网页 但是,当我执行下面的代码时,没有获得任何页面 代码是Python 无法使用AIOHTTPClientSession获取网页,python,python-asyncio,Python,Python Asyncio,我想使用asyncio来获取网页 但是,当我执行下面的代码时,没有获得任何页面 代码是 导入aiofiles 进口aiohttp 从aiohttp导入客户端会话 导入异步 异步def get_网页(url、会话): 尝试: res=wait session.request(method=“GET”,url=url) html=await res.text(encoding='GB18030') 返回0,html 除: 返回1,[] 异步def main_get_网页(URL): 网页=[] 连接
导入aiofiles
进口aiohttp
从aiohttp导入客户端会话
导入异步
异步def get_网页(url、会话):
尝试:
res=wait session.request(method=“GET”,url=url)
html=await res.text(encoding='GB18030')
返回0,html
除:
返回1,[]
异步def main_get_网页(URL):
网页=[]
连接器=aiohttp.TCP连接器(限值=60)
与ClientSession(连接器=连接器)作为会话异步:
任务=[获取url中url的网页(url,会话)]
结果=等待asyncio.gather(*任务)
对于状态,结果中的数据:
打印(状态)
如果状态==0:
网页.附加(数据)
返回网页
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
URL=['https://lcdsj.fang.com/house/3120178164/fangjia.htm', 'https://mingliugaoerfuzhuangyuan0551.fang.com/house/2128242324/fangjia.htm']
loop=asyncio.proactReventLoop()
asyncio.set\u event\u循环(循环)
loop=asyncio.get\u event\u loop()
webpage=loop.run_直到_完成(main_get_网页(URL))
我希望函数main\u get\u网页(URL)
中会打印两个零
然而,有两个是印刷的
我的代码怎么了
如何解决这个问题
多谢各位
我的代码怎么了
问题是您有一个try:。。。除了:
,它掩盖了问题的根源。如果删除except
子句,您将发现一条错误消息,该消息传达了根本问题:
UnicodeDecodeError: 'gb18030' codec can't decode byte 0xb7 in position 47676: illegal multibyte sequence
该网页未编码为GB18030。该页面声明自己为GB2312(GB18030的前游标),但将其用作编码也失败了
如何解决这个问题
根据您想对网页文本执行的操作,您有几个选项:
GBK
,这会在字符47676上产生错误。)res.text(encoding='GB18030',errors='replace')
。这将为您提供一个很好的文本近似值,其中不可解析的字节将作为文本呈现。如果您需要在页面中搜索子字符串或将其作为文本进行分析,并且不关心其中某个奇怪的字符,那么这是一个很好的选择res.data()
获取字节。如果您需要存档或缓存页面,或为其编制索引,则此选项是最佳选择try:。。。除了:
,它掩盖了问题的根源。如果删除except
子句,您将发现一条错误消息,该消息传达了根本问题:
UnicodeDecodeError: 'gb18030' codec can't decode byte 0xb7 in position 47676: illegal multibyte sequence
该网页未编码为GB18030。该页面声明自己为GB2312(GB18030的前游标),但将其用作编码也失败了
如何解决这个问题
根据您想对网页文本执行的操作,您有几个选项:
GBK
,这会在字符47676上产生错误。)res.text(encoding='GB18030',errors='replace')
。这将为您提供一个很好的文本近似值,其中不可解析的字节将作为文本呈现。如果您需要在页面中搜索子字符串或将其作为文本进行分析,并且不关心其中某个奇怪的字符,那么这是一个很好的选择res.data()
获取字节。如果您需要存档或缓存页面,或为其编制索引,则此选项是最佳选择谢谢你的帮助。我不能得到正确的编码,我需要的内容。所以我采取解决方案2,没问题。还有
错误='ignore'
,这将完全删除有问题的序列。感谢您的帮助。我不能得到正确的编码,我需要的内容。所以我采取解决方案2,没问题。还有errors='ignore'
,这将完全删除有问题的序列。