今天用python写脚本抓取一些中医资料存档时,出现一个问题,获取的内容只有一部分,或长或短,但大多都不全。
排除动态加载数据的原因,怀疑是不是用协程 session.request()来抓取的有兼容上或时效上问题,重试了一下 requests.get()的情况,还是不完整。
网上搜一下有没有类似情况,还真有,这一朋友提供如下解决的办法:
解决方法为放入文件里,再读取即可把获取到的页面内容保存到文件里,再读取,就拿到了。可能原因是页面过大,python的输出限制长度。
tmp_html = "temp.html" source_html = requests.get(url) with open(tmp_html, "w+", encoding="utf-8") as f: f.write(source_html.text) f.seek(0) html_handle = f.read() soup = BeautifulSoup(html_handle,"lxml") soup.find(xxxx)
如果文件过大无法写入,可使用requests.iter_content写with open(filename, 'wb') as fd: for chunk in r.iter_content(chunk_size): fd.write(chunk)
原文链接:https://blog.csdn.net/zhangpengfei991023/article/details/128683736
按上面所说试了先保存再读入,确实能读全了 ,但是,真的要再读写一下文件这么麻烦的吗?
测试中发现,使用source_html.content传入BF解析,会有内容不全的情况,
但同一个 source_html, 使用source_html.text传入,虽然会乱码,但内容貌似增加了不少,
试一下转码,居然正常齐全了!
所以 ,不需要多读写一遍文件,只要转下码就可以解决这个问题。
作为一个碰到问题先从网上找办法的一员,也和可能会碰到这个问题的朋友分享一下。