BAE上部署了python-worker类型,想部署个爬虫在上面呢。可是偏偏就是不成功。代码在本地是可以正确的爬取页面,解析页面后,提取想要的内容的。
部署到BAE后,发现,页面可以抓取到,可是返回的html的长度不对:如:某个网页本来是98541,可是在BAE中抓取后,html长度就变成了28831
re,正则表达式抽取模块是对的,可以按照模式正常抽取。说明解析这部分,是正确的
数据库操作部分也是:可以连接,插入。
可是,当我把整个htmly页面插入到 longtext字段时,发现程序可以运行,但是该字段 为空! 是html整个页面太长了么?为什么插入的时候不报错,只是个warning???id自动增长
所以,我觉得,现在问题是不是归咎于,请求html页面的时候,返回的html页面压缩了???
闹心
核心代码如下
#-*- coding:utf-8 -*-
import time
import sys
import urllib2
import urllib
import re
import MySQLdb
#抓取网页
#形成url列表
def url_list():
url_def_s={}
url_def_s[0]="http://news.163.com/domestic/"
url_def_s[9]="http://news.163.com/special/0001124J/guoneinews_10.html"
i=1
for i in range(1,9):
url_def_s[i]="http://news.163.com/special/0001124J/guoneinews_0"+str(i+1)+".html"
return url_def_s
def pre_url(url):
#对url进行预处理。
url=url.replace("<h2><a href=",' ').replace("</a></h2>",' ')
ss=url
return ss
def start():
start = time.clock()#开始计时
urls=url_list() #形成总的url列表
#print urls
#遍历url
j=0
for j in range(0,10):
print j
#ss=urls[j]
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)
#print response.read()
content=response.read() #就是这一句啊。返回的html怎么就不对了呢?
except urllib2.URLError, e:
if hasattr(e,"code"):
print e.code
if hasattr(e,"reason"):
print e.reason
# content = urllib2.urlopen("http://news.163.com/domestic/").read() #可以获得页面
print type(content)
print len(content)
content_extract=re.findall("<p>(.*)<br />",content+"<p>####!@#$%^<br />") #这句话也没有错。重要的是content为什么就28803..实际上应该是9****
print len(content_extract)
print "len content_extract"
print "len content"
print len(content)
content22=content_extract
#print len(content22)
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)
### 执行sql命令,创建table test
cursor = mydb.cursor()
print "cursor connect"
#一行行插入
s=content
print type(s)
print len(s)
value=["",s]
cmd = "insert into html(id,html_content) values(%s,%s)"
cursor.execute(cmd,value)
'''
for i in range(0,len(content22)):
print "come"
s=content22[i]
#s=content
print type(s)
print len(s)
value2=["",s]
cmd = "insert into content(id,cont) values(%s,%s)"
cursor.execute(cmd,value2)
print "good insert"
'''
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()