IndexError: list index out of range

http://apk.gfan.com/Product/App579342.html

Traceback (most recent call last):

  File "crawler0719.py", line 98, in <module>
    main()
  File "crawler0719.py", line 45, in main
    values=("凤凰",data1[0],data2[0],data3[0],data4[0],data5[0],re.sub('<br />',' ',items))
IndexError: list index out of range

#!/usr/env  python
#-*- coding: utf-8  -*-
import urllib 
import urllib2 
import random 
import requests
import os,sys 
import MySQLdb
from sgmllib import SGMLParser 
import re
try:
	   conn=MySQLdb.connect(host='localhost',user='root',passwd='123456',db='addressbookdb')
except Exception,e:
	   print e
	   sys.exit()
cursor=conn.cursor() 
def main():
    url="http://apk.gfan.com/apps_7_1_1.html"
    html=requests.get(url)
    result=html.content
    pattern=re.compile('<a href="([http://apk.gfan.com]?/Product/App\d{1,8}.html)"')
    pattern1=re.compile('<a href="(http://apk.gfan.com/Product/App\d{1,8}.html)"')
    data1=re.findall(pattern,result)
    data2=re.findall(pattern1,result)
    for i in data1:
         t="http://apk.gfan.com"+i
         print t
         html=requests.get(t)
         result=html.content
         pattern=re.compile('版 本 号(.+?)</li>')
         data1=re.findall(pattern,result)
         pattern=re.compile('开 发 者(.+?)</li>')
         data2=re.findall(pattern,result)
         pattern=re.compile('发布时间(.+?)</li>')
         data3=re.findall(pattern,result)
         pattern=re.compile('文件大小(.+?)</li>')
         data4=re.findall(pattern,result)
         pattern=re.compile('支持固件(.+?)</li>')
         data5=re.findall(pattern,result)
         pattern=re.compile('产品介绍([\s\S]*?) </div>')
         data6=re.findall(pattern,result)
    #print re.sub('<br />',' ',data6)
         sql="insert into address(name,version,developer,pubtime,filesize,support,introduction) values(%s,%s,%s,%s,%s,%s,%s)"
         for items in data6:
			 if(data5[0])
	         values=("凤凰",data1[0],data2[0],data3[0],data4[0],data5[0],re.sub('<br />',' ',items))
	         print values
	   #print sql % values
	         cursor.execute(sql,values)
	         del values[0:]
    pattern=re.compile(' <div class="appTitle clearfix">[\s\S]*?<img src=(.+?)/>')
    data=re.findall(pattern,result)
    for i in data:
      #temp = urllib2.urlopen(i[10:])
        # 这个是保存函数,第一个参数是地址,第二个是保存的文件名,让地址的倒数8位,当做文件名
        urllib.urlretrieve(i[1:-2], i[-8:])
         
    for i in data2:
		print 'hello'
		print i
		html=requests.get(i)
		result=html.content
		pattern=re.compile('版 本 号(.+?)</li>')
		data1=re.findall(pattern,result)
		pattern=re.compile('开 发 者(.+?)</li>')
		data2=re.findall(pattern,result)
		pattern=re.compile('发布时间(.+?)</li>')
		data3=re.findall(pattern,result)
		pattern=re.compile('文件大小(.+?)</li>')
		data4=re.findall(pattern,result)
		pattern=re.compile('支持固件(.+?)</li>')
		data5=re.findall(pattern,result)
		pattern=re.compile('产品介绍([\s\S]*?) </div>')
		data6=re.findall(pattern,result)
    #print re.sub('<br />',' ',data6)
		sql="insert into address(name,version,developer,pubtime,filesize,support,introduction) values(%s,%s,%s,%s,%s,%s,%s)"
		for items in data6:
			values=("凤凰",data1[0],data2[0],data3[0],data4[0],data5[0],re.sub('<br />',' ',items))
	   #print sql % values
    cursor.execute(sql,values)
    pattern=re.compile(' <div class="appTitle clearfix">[\s\S]*?<img src=(.+?)/>')
    data=re.findall(pattern,result)
    for i in data:
      #temp = urllib2.urlopen(i[10:])
        # 这个是保存函数,第一个参数是地址,第二个是保存的文件名,让地址的倒数8位,当做文件名
        urllib.urlretrieve(i[1:-2], i[-8:])
       
    sql="select * from address"
    #print sql
    cursor.execute(sql)
    conn.commit()
    data1=cursor.fetchall()
    if data1:
	  for x in data1:
		print x[0:]
    cursor.close()
    conn.close()
if  __name__=="__main__":
       main()

出错的原因是列表越界了,其中values是一个列表,我一直以为是values出错,结果是values其中的元素也是列表,是其中的列表越界了,停止的这个url网页没有版本号,即最上面的那个URL,所以data5为空,所以data5[0]越界了,index out of range


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值