关于Python写的网页爬虫问题

悲酥清风 2009-08-14 04:45:34
我刚开始学,在网上找到一个爬虫代码想学习一下,但在执行的时候出错,不知道什么原因,请各位帮忙看一下,我装的是Python2.6.2
以下是代码:
#!/usr/bin/python
import urllib2
import re

def downURL(url,filename):
print url
print filename
try:
fp = urllib2.urlopen(url)
except:
print 'download exception'
return 0
op = open(filename,"wb")
while 1:
s = fp.read()
if not s:
break
op.write(s)

fp.close()
op.close()
return 1

#downURL('http://www.sohu.com','http.log')

def getURL(url):
try:
fp = urllib2.urlopen(url)
except:
print 'get url exception'
return 0

pattern = re.compile("http://sports.sina.com.cn/[^\>]+.shtml")
while 1:
s = fp.read()
if not s:
break
urls = pattern.findall(s)
fp.close()
return urls

def spider(startURL,times):
urls = []
urls.append(startURL)
i = 0
while 1:
if i > times:
break;
if len(urls)>0:
url = urls.pop(0)
print url,len(urls)
downURL(url,str(i)+'.htm')
i = i + 1
if len(urls)<times:
urllist = getURL(url)
for url in urllist:
if urls.count(url) == 0:
urls.append(url)
else:
break
return 1
spider('http://www.baidu.com',10)

错误提示:
http://www.baidu.com 0
http://www.baidu.com
0.htm
download exception
get url exception
Traceback (most recent call last):
File "D:/test/papa.py", line 62, in <module>
spider('http://www.baidu.com',10)
File "D:/test/papa.py", line 56, in spider
for url in urllist:
TypeError: 'int' object is not iterable
...全文
405 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cppfaq 2009-08-25
  • 打赏
  • 举报
回复
e,楼主的代码习惯不大好
吞异常
虽然except:了,但是调用代码没有判断方法的返回值

另外:
while 1:
if i > times:
break;
这样的写法也蛮奇怪的
iambic 2009-08-25
  • 打赏
  • 举报
回复
如果不知道怎么处理异常就让它一直抛上来,别胡乱catch。
mrshelly 2009-08-25
  • 打赏
  • 举报
回复

print 'get url exception'
return 0

改成

print 'get url exception'
return []

zymiao 2009-08-24
  • 打赏
  • 举报
回复
学习一下来
haosimentu 2009-08-23
  • 打赏
  • 举报
回复
应该是0.htm中的url无法open(url)导致download exception,然后
print 'get url exception'
return 0


urllist = getURL(url)
for url in urllist:
的时候,因为urllist=0,又导致TypeError: 'int' object is not iterable
DarkChampion 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gift_lbs 的回复:]
调用urlopen时 传递的参数是url 不是str(i)+'.htm'
[/Quote]

哦,看错了

我运行了一下好像没问题,可以获取网页内容
gift_lbs 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 darkchampion 的回复:]
Python codedownURL(url,str(i)+'.htm')
看到这句话没,i=0
所以请求的页面为0.htm
这个页面不存在,所以调用urlopen时肯定抛异常了
[/Quote]

调用urlopen时 传递的参数是url 不是str(i)+'.htm'
DarkChampion 2009-08-14
  • 打赏
  • 举报
回复
downURL(url,str(i)+'.htm')

看到这句话没,i=0
所以请求的页面为0.htm
这个页面不存在,所以调用urlopen时肯定抛异常了
悲酥清风 2009-08-14
  • 打赏
  • 举报
回复
在调用fp = urllib2.urlopen(url)
时抛出异常,但不知道原因是什么?
【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何出高效率的爬虫,如何出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是:网络请求:模拟浏览器的行为从网上抓取数据。数据解析:将请求下来的数据进行过滤,提取我们想要的数据。数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是:爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求!【课程服务】 专属付费社群+定期答疑

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧