BAE 上部署python-worker 爬虫遇到的问题

在BAE平台上部署Python-worker类型的爬虫时,遇到抓取的HTML内容长度异常问题。虽然本地运行正常,但在BAE上,网页的HTML长度从98541缩短为28831,导致数据库longtext字段插入时为空。尽管正则表达式和数据库操作部分正常,但怀疑可能是请求返回的HTML被压缩。目前没有错误提示,只有一个警告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值