同样的程序,在本机上跑的好好的。部署到BAE python-worker服务后,出现问题。
比如:同样一个url, 在本地返回改地址的HTML网页时,length 为 98551
可是部署到BAE python-worker上后,length 只有28831。
为什么啊?烦请版主大人帮忙看一下,调了好几天了,闹心
代码如下:(python)
#-*- coding:utf-8 -*-
import time
import sys
import urllib2
import urllib
import re
import MySQLdb
def start():
start = time.clock()
#抓取指定url的网页
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
try:
request = urllib2.Request("http://news.163.com/domestic/",headers = headers)
response = urllib2.urlopen(request)
content=response.read() #content 为返回的网页. 本地长度为93826, ;在BAE上的爬虫,抓取的同样的网页,返回的长度只有28181。为什么啊???
except urllib2.URLError, e:
if hasattr(e,"code"):
print e.code
if hasattr(e,"reason"):
print e.reason
print type(content)
print len(content) #content网页长度
#解析,抓取内容
content_extract=re.findall("<p>(.*)<br />",content)
print len(content_extract) #抓取的本网页新闻条数
#连接BAE免费提供的数据库
dbname = "YEAULFAnYANYttSNeGgA"
api_key = "bb5dbc2a290f452d8faa008c289b33fd"
secret_key = "44c22ffc6fea4937b880292edbaf6bb7"
mydb = MySQLdb.connect(
host = "sqld.duapp.com",
port = 4050,
user = api_key,
passwd = secret_key,
db = dbname)
cursor = mydb.cursor()
print "cursor connect"
#content_extract 是个list,现在进行插入数据库
for i in range(0,len(content_extract)):
print "ready to insert....."
s=content_extract
value2=["",s]
cmd = "insert into content(id,cont) values(%s,%s)"
cursor.execute(cmd,value2)
print "have inserted"
mydb.close()
end = time.clock()
print "read: %f s" % (end - start)
while True:
time.sleep(3)
try:
start()
except Exception, e:
sys.stdout.write(" error!\n")
sys.stdout.flush()
PS:
当遇到技术难题的时候,你会怎么办。
首先,如果只是涉及到编码,bug的时候,当然是自己一个点,一个模块,整体功能,进行测试,排错。我目前只会用print来排错哎。。。嘿嘿
调代码,测试,还是不行的话。
其次,问同学,同事
最后,还不行的话,就到相应的技术讨论群发帖子寻求帮助。
如果还涉及到其他第三方的平台,调用别人的库神马之类的话
第一反应,是好好阅读官方提供的手册,而不是第一反应去网上海搜。
调代码,测试,还是不行的话。
问同学,同事
还不行的话,就到相应的技术讨论群发帖子寻求帮助。