鱼C论坛

 找回密码
 立即注册
查看: 2055|回复: 10

[已解决]python爬虫爬取知识库,json报文无法完整获取

[复制链接]
发表于 2021-11-22 10:50:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近想把统信uos的问题库离线化,在爬取过程中发现无法获取完整的返回,无论使用httpx还是用requests。也试过selenium,同样的结果。其中有意思的是firefox中对响应报文提示响应已截断,chrome没有类似提示也能够完整的获取json响应内容。

  1. import httpx
  2. import json
  3. from bs4 import BeautifulSoup


  4. def getHtml():
  5.     data = []
  6.     header = {"User-Agent": "Chrome/96.0.4664.45 Safari/537.36"}
  7.     url = "https://ecology.chinauos.com/adaptidentification/uos/knowledge/everyoneget?parent=%E7%B3%BB%E7%BB%9F%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98&type=%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F%E9%97%AE%E9%A2%98&"
  8.     try:
  9.         resp = httpx.get(url, headers = header)
  10.     finally:
  11.         resp.close()
  12.     print(resp.content)
  13.    
  14. def dataReact(html):
  15.     soup = BeautifulSoup(html,'lxml')
  16.     print(soup.prettify())
  17.    
  18. if __name__ == '__main__':
  19.     textHtml = []
  20.     html = getHtml()
复制代码
最佳答案
2021-11-23 15:25:17
过去的云雾 发表于 2021-11-23 14:55
请看一下原贴中的截图,python库取回的结果不完整,报文被截断了

我没有httpx库,用requests库爬下来保存文件看,数据全的。
  1. import requests


  2. def main():
  3.     url = "https://ecology.chinauos.com/adaptidentification/uos/knowledge/everyoneget?parent=%E7%B3%BB%E7%BB%9F%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98&type=%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F%E9%97%AE%E9%A2%98&"
  4.     headers = {'user-agent': 'firefox'}
  5.     r = requests.get(url, headers=headers)
  6.     with open('r.txt', 'w', encoding='utf-8') as f:
  7.         f.write(r.text)


  8. if __name__ == '__main__':
  9.     main()

复制代码

你把你用httpx下载的页面保存成文本看看呢,可能显示上会有截取。
微信图片_20211122104129.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-22 11:16:32 | 显示全部楼层
我看得到1278项,这也不完整吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-22 13:32:34 | 显示全部楼层
不完整,03003-00105
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-22 14:07:24 | 显示全部楼层

03003-00105是指什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-23 10:56:32 | 显示全部楼层
本帖最后由 过去的云雾 于 2021-11-23 11:01 编辑
suchocolate 发表于 2021-11-22 14:07
03003-00105是指什么?


我错了,好像只有1278条数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-23 12:00:08 | 显示全部楼层
过去的云雾 发表于 2021-11-23 10:56
我错了,好像只有1278条数据

是不是还有下一页的url,访问那一页才能得到后面的数据?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-23 13:33:00 | 显示全部楼层
suchocolate 发表于 2021-11-23 12:00
是不是还有下一页的url,访问那一页才能得到后面的数据?

没有了,就是这个页面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-23 13:38:15 | 显示全部楼层
过去的云雾 发表于 2021-11-23 13:33
没有了,就是这个页面

那接下来处理这些数据就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-23 14:55:55 | 显示全部楼层
suchocolate 发表于 2021-11-23 13:38
那接下来处理这些数据就可以了。

请看一下原贴中的截图,python库取回的结果不完整,报文被截断了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-23 15:25:17 | 显示全部楼层    本楼为最佳答案   
过去的云雾 发表于 2021-11-23 14:55
请看一下原贴中的截图,python库取回的结果不完整,报文被截断了

我没有httpx库,用requests库爬下来保存文件看,数据全的。
  1. import requests


  2. def main():
  3.     url = "https://ecology.chinauos.com/adaptidentification/uos/knowledge/everyoneget?parent=%E7%B3%BB%E7%BB%9F%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98&type=%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F%E9%97%AE%E9%A2%98&"
  4.     headers = {'user-agent': 'firefox'}
  5.     r = requests.get(url, headers=headers)
  6.     with open('r.txt', 'w', encoding='utf-8') as f:
  7.         f.write(r.text)


  8. if __name__ == '__main__':
  9.     main()

复制代码

你把你用httpx下载的页面保存成文本看看呢,可能显示上会有截取。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-25 17:07:59 | 显示全部楼层
suchocolate 发表于 2021-11-23 15:25
我没有httpx库,用requests库爬下来保存文件看,数据全的。

你把你用httpx下载的页面保存成文本看看呢 ...

可以获取到,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 16:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表