pyspider踩坑

最近在使用pyspider做一些基础小爬虫展示, 链接在此

然而在开始的时候是没有问题的, 但是部署在阿里云的服务器就出现了以下问题:

左边的是阿里云, 无论怎么调整都是乱码,

如果使用response.content.decode('utf8' or 'gbk')

就出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte等的错误提示

造成原因是, 阿里云没有直接兼容gzip

由于伪装浏览器后, 浏览器会使用accept-encoding: gzip, deflate, br几种压缩, 服务器会优先返回gzip的格式, 所以造成了乱码

解决办法1:

import gzip
data = gzip.decompress(response.content)
print(data)
"""
b'{"result":{"status":{"code":0,"msg":"succ"},"timestamp":"Tue Apr 21 20:25:20 +0800 2020","top":[],"pdps":[],"cre":[],"total":1546300,"end":1587469571,"start":1587471913,"lid":2509,"rtime":1587471920,"data":[{"oid":"325795330","docid":"comos:ircuyvh9077333","url":"https:\\/\\/tech.sina.com.cn\\/i\\/2020-04-21\\/doc-iircuyvh9077333.shtml","wapurl":"https:\\/\\/tech.sina.cn\\/i\\/gj\\/2020-04-21\\/detail-iircuyvh9077333.d.html","title":"\\u62c5\\u5fe7\\u75ab\\u60c5\\u81f4\\u7f8e\\u56fd\\u80a1\\u5e02\\u9707\\u8361 \\u6295\\u8d44\\u8005\\u518d\\u6b21\\u62bc\\u6ce8\\u4e94\\u5927\\u79d1\\u6280\\u80a1","stitle":"","summary":"\\u636e\\u56fd\\u5916\\u5a92\\u4f53\\u62a5\\u9053\\uff0c\\u5728\\u5f53\\u524d\\u7684\\u65b0\\u51a0\\u75c5\\u6bd2\\u75ab\\u60c5\\u4e0b\\uff0c\\u6295\\}}'
"""

这样子就可以获得b'json'格式的正常内容了

解决方法2: 直接强制在headers中'Accept-Encoding': 'deflate', 不提交gzip, 也可以解决此问题.

目前我三台服务器: 阿里云 / 华为云 / 腾讯云, 只有阿里云出现了这样的问题, 所以如果大家也出现了, 就可以这样解决, 据说阿里云通过控制台调整一下配置让它支持gzip响应也是可以的, 不过这个我还没实际操作过.


除此之外, 由于需要抓取一些动态页面, pyspider使用phantomjs时, 由于phantomjs太老了, 没有维护更新, 会造成内存溢出, 活动的时候最严重出现了直接把我4G内存(日常占用50%左右)挤爆了, 看来还是得自己做个接口配合pyspider来启动seleium辅助抓取页面, 解决这种难受的问题......


如果本文对你有启发,或者对本文有疑问或者功能/方法建议,可以在下方做出评论,或者直接联系我,谢谢您的观看和支持!

添加新评论

本站现已启用评论投票,被点踩过多的评论将自动折叠。与本文无关评论请发留言板。请不要水评论,谢谢。

已有 0条评论