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