http://apk.gfan.com/Product/App579342.html
Traceback (most recent call last):
File "crawler0719.py", line 98, in <module>#!/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