问题描述
- Python爬虫爬取网页源代码为空,求问原因&解决方案(向)
- 代码如下:
import urllib
import urllib2
import reurl ='http://www.yingjiesheng.com/guangzhou-moreptjob-2.html'
req = urllib2.Request(url)
try:
html = urllib2.urlopen(req).read()
print html
except urllib2.HTTPError e:
print 'The server couldn't fulfill the request.'
print 'Error code: ' e.code
except urllib2.URLError e:
print 'We failed to reach a server.'
print 'Reason: ' e.reason
else:
print 'No exception was raised.'求:在爬取网页源代码的时候返回空的原因及解决方案(或解决方向)~求大神指点迷津啊! (PS:在处理这个问题的时候,我曾在IDLE上直接敲这段代码运行,有时候可以返回源代码有时候不可以,另外,有时候我把程序运行了几十遍之后,就能返回源代码,这时候我把url的数字2改为3时(即相当下一页),又不可以了,好诡异~~)
解决方案
代码:
#!/usr/bin/env python3#-*- coding=utf-8 -*-import urllib3if __name__ == '__main__': http=urllib3.PoolManager() r=http.request('GET''http://www.yingjiesheng.com/guangzhou-moreptjob-2.html') print(r.data.decode(""gbk""))
可以正常抓取。需要安装urllib3py版本3.43
解决方案二:
页面是异步的,ajax方式,所以你请求的时候有时候没有拿到内容就返回了。
运行截图。
解决方案四:
感谢好心人的帮忙,虽然最后我用了另外的方式搞定了问题。
首先,我想说这次问题并不是因为ajax的异步问题,因为该网页貌似没有用到ajax的技术,而且即便用了ajax技术,一般也不会返回为空吧?(京东网有用ajax我爬过,所以感觉这次问题不是ajax的异步问题)
其次,最后我换了个编译器(pycharm)并且在Python2.7中用urllib2解决了以上问题,问题的直接原因是编译器问题。另外,鉴于回复中有用urllib3也能解决的答案,所以我觉得这次问题产生的根本原因可能是编译器运行代码时对服务器请求时或得到回复时出了问题,可能是连接中断?或者访问超时?具体原因不明,因为我的代码在python自带的IDLE中,只要一行一行的码上去,然后一行一行的运行是没问题的,一旦写在脚本上,全部代码一次性运行就会出现问题了(有时候把脚本运行几十次也就行了;重启几次IDLE,再运行也行了(好诡异!!!))。
最后,希望以后能查出真正的原因!
解决方案五:
上周去比赛..怕第二天代码出问题,前一天晚上写好代码测试好电脑都没敢关机,结果第二天演示时候出错,key error...觉得urllib2这个库有时候很扯..不知道为什么 会不会牵扯到缓存什么的