鱼C论坛

 找回密码
 立即注册
查看: 3094|回复: 8

关于爬虫出错问题

[复制链接]
发表于 2015-5-17 10:21:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #!/usr/bin/env python3
  2. #getcode()为获取到的状态码, 200, 403(这里只获取到这两种状态页面), 返回值为int
  3. #把目录加在后面再扫描, 获取状态码得到目录是否存在
  4. '一个简单的目录扫描, 还没有加到错错处理, 当出现不存在目录时, 也会记录不存在目录为200, 但存在目录时, 差不多会正确扫描得到'
  5. import urllib.request
  6. import os
  7. import urllib.parse

  8. #headers = {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0"}#防禁
  9. newline = os.linesep#换行符

  10. targeturl = input('请输入目标网页(以http://开头):').strip()
  11. #targeturl = urllib.parse.urlencode(targeturl).encode("utf-8")#转为网络编码
  12. print('开始扫器.......')
  13. #用一个文件保存结果
  14. filename = "dirscanresult.txt"
  15. targetdata = open(filename, "w+")
  16. #下面打开一个文件, 把目录加到上面去
  17. dirdata = open('./dirdata.txt', 'r')
  18. for eachling in dirdata:
  19.         targeturl_test = targeturl + eachling.strip()
  20.         print(targeturl_test)
  21.         #把目录路径保存
  22.         #try:
  23.         targeturl_test = urllib.request.urlopen(targeturl_test, timeout=10)#timeout=10设置10秒超时
  24.         #        print(targeturl_test.geturl())
  25.         #except urllib.error.URLError as ERR:
  26.         #        print("%s\t%s" % (targeturl_test, ERR.getcode))
  27.         #except:
  28.         #        print('targeturl:%s无法打开' % (targeturl_test))
  29.         #        print('结束扫描')
  30.         #        break
  31.         targeturl_status = targeturl_test.getcode()       
  32.         print("%s\t%s" % (targeturl_test.geturl(), targeturl_status))
  33.         #打开指定目录
  34.         if(targeturl_status == 200 or targeturl_status == 403):
  35.                 targetdata.write("%s\t%s%s" % (targeturl_test.geturl(), targeturl_status, newline))
  36. targetdata.close()
  37. print('扫描完成')
复制代码
写了个简单的目录扫描
问题就是, 如果链接不存在, 会直接报错退出程序。。。。
请问, 怎么解决?
是不是模块选错了?
刚学PY不久, 请大家指点一下。。。
谢谢。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-5-17 11:58:09 | 显示全部楼层
本帖最后由 小人 于 2015-5-17 12:01 编辑
  1. try:                
  2.     img=urllib.request.urlopen(imgurl[0].strip()).read()
  3.     filename=imgurl[0].split('/')[-1]
  4.     with open(filename,'wb') as file:
  5.         file.write(img)
  6.     count+=1
  7.     print('thread0: 已下载%d张图片'%count,pageing)
  8.                            
  9.                             except:
  10.     print('thread0: error:1')
复制代码
把网页打开这些操作用  try except:包起来  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-17 12:02:18 | 显示全部楼层
试试requests模块。第三方,需下载。
里面的status_code可以查看当前的状态码,且不报错。
360截图20150517120259676.jpg
http://bbs.fishc.com/thread-59850-1-1.html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-17 14:18:47 | 显示全部楼层
本帖最后由 Reed 于 2015-5-17 14:27 编辑
  1. rqst = urllib.request.urlopen('https://www.baidu.com/')
  2. rqst.code
  3. >>>200
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-17 16:56:04 | 显示全部楼层
wei_Y 发表于 2015-5-17 12:02
试试requests模块。第三方,需下载。
里面的status_code可以查看当前的状态码,且不报错。

urllib.request.Request对象的code方法就好了。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-17 17:03:13 | 显示全部楼层
戴宇轩 发表于 2015-5-17 16:56
urllib.request.Request对象的code方法就好了。。。

报错呀。404报错,403报错。呃,捕获错误也行。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-29 15:29:47 | 显示全部楼层
wei_Y 发表于 2015-5-17 17:03
报错呀。404报错,403报错。呃,捕获错误也行。。
  1. In [6]: rqst = urllib.request.urlopen('http://www.baidu.com/asfeaw')

  2. In [7]: rqst.status
  3. Out[7]: 200

  4. In [8]:
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-29 15:30:50 | 显示全部楼层
wei_Y 发表于 2015-5-17 17:03
报错呀。404报错,403报错。呃,捕获错误也行。。
  1. In [6]: rqst = urllib.request.urlopen('http://www.baidu.com/asfeaw')

  2. In [7]: rqst.status
  3. Out[7]: 200

  4. In [8]:
复制代码


这里, 明显不存在, 但是200, 在IE上打开后, 百度会自动转到ERROR页面,
要怎么处理才能知道这个页面不存在?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-29 15:32:12 | 显示全部楼层

这是可行, 但我在一个循环里使用时, 当得到404时, 会错误终止程序
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-16 03:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表