鱼C论坛

 找回密码
 立即注册
查看: 2664|回复: 1

爬代理IP时出现的错误

[复制链接]
发表于 2015-10-15 23:20:02 | 显示全部楼层 |阅读模式

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

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

x
报错和代码如下,求助大侠

Traceback (most recent call last):
  File "C:\Python27\test\download_mm.py", line 138, in <module>
    download_ip()
  File "C:\Python27\test\download_mm.py", line 26, in download_ip
    str_ip=re.search(r'(([01]?\d?\d|2[0-4]\d|25[0-5])\.){3}([01]?\d?\d|2[0-4]\d|25[0-5])',html).group()
AttributeError: 'NoneType' object has no attribute 'group'

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-

  3. import urllib2
  4. import os
  5. import os.path
  6. import random
  7. import datetime
  8. import re

  9. #获取代理ip将它保存在本地ini文档中
  10. def download_ip(folder='AGENT_IP'):
  11.     if os.path.exists('C:\\Python27\\test\\'+folder)==False:
  12.         os.mkdir(folder)    #创建文件夹
  13.     os.chdir(folder)    #切换至当前文件夹
  14.     #ini文档以日期格式命名
  15.     today=datetime.date.today()
  16.     if os.path.isfile('C:\\Python27\\test\\'+folder+'\\'+str(today)+'.ini')==False:
  17.         url='http://www.kuaidaili.com/'
  18.         html=url_open(url).decode('utf-8','ignore')
  19.         
  20.         #匹配IP地址
  21.         ip_addrs=[]
  22.         a=0
  23.         while a!=-1:
  24.             str_ip=re.search(r'(([01]?\d?\d|2[0-4]\d|25[0-5])\.){3}([01]?\d?\d|2[0-4]\d|25[0-5])',html).group()
  25.             print str_ip
  26.             a=html.find(str_ip)
  27.             str_port=re.search(r'[0-9]{2,4}',html[a+20:]).group()
  28.             ip_addrs.append(str_ip+':'+str_port)
  29.             html=html[a+80:]

  30.         for each_ip in ip_addrs:
  31.             print each_ip
  32.         #打开文档并写入
  33.         '''
  34.         f=open(file_name,'wb')
  35.         f.write(ip_addrs)
  36.         f.close
  37.         '''

  38. def url_open_agent(url):
  39.     req=urllib2.Request(url)
  40.     req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0')   #伪装成浏览器访问

  41.     #加入代理IP
  42.     '''
  43.     proxy=['120.195.202.189:80']
  44.     proxy=random.choice(proxy)
  45.     proxy_support=urllib2.ProxyHandler({'http':proxy})
  46.     opener=urllib2.build_opener(proxy_support)
  47.     urllib2.install_opener(opener)
  48.     '''
  49.     response=urllib2.urlopen(req)   
  50.     html=response.read()    #因图片和字符全部调用此函数访问,返回图片时不可以用decode解码,所以字符的解码放在具体的调用函数里
  51.     return html

  52. def url_open(url):
  53.     req=urllib2.Request(url)
  54.     req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0')   #伪装成浏览器访问

  55.     #加入代理IP
  56.     '''
  57.     proxy=['120.195.202.189:80']
  58.     proxy=random.choice(proxy)
  59.     proxy_support=urllib2.ProxyHandler({'http':proxy})
  60.     opener=urllib2.build_opener(proxy_support)
  61.     urllib2.install_opener(opener)
  62.     '''
  63.     response=urllib2.urlopen(req)   
  64.     html=response.read()    #因图片和字符全部调用此函数访问,返回图片时不可以用decode解码,所以字符的解码放在具体的调用函数里
  65.     return html

  66. def get_page(url):
  67.     #pass
  68.     html=url_open(url).decode('utf-8')
  69.     a=html.find('current-comment-page')+23
  70.     b=html.find(']',a)  #从a开始第一次出']'的位置
  71.     #print(html[a:b])
  72.     return html[a:b]

  73. def find_imgs(url): #获取地址时怎么去掉广告图片???
  74.     #pass
  75.     html=url_open(url).decode('utf-8')
  76.     img_addrs=[]
  77.     a=html.find('img src=')
  78.     while a!=-1:
  79.         #b=html.find('.jpg',a,a+255)
  80.         
  81.         c=html.find('sinaimg',a,a+50)
  82.         if c!=-1:
  83.             b=html.find('.jpg',a,a+255)   #正则表达式可以更好地解决此问题,可以找任意格式的图片
  84.         else:
  85.             b=-1
  86.    
  87.         if b!=-1:
  88.             img_addrs.append(html[a+9:b+4])
  89.         else:
  90.             b=a+9
  91.         a=html.find('img src=',b)
  92.         
  93.    

  94.     '''
  95.     for each in img_addrs:
  96.         print(each)
  97.     '''
  98.     return img_addrs

  99. def save_imgs(folder,img_addrs):
  100.     #pass
  101.     for each in img_addrs:
  102.         filename=each.split('/')[-1]    #分割,去除路径,只获取文件名
  103.         with open(filename,'wb') as f:
  104.             img=url_open(each)
  105.             f.write(img)

  106. def download_mm(folder='OOXX',pages=10):
  107.     if os.path.exists('C:\\Python27\\test\\'+folder)==False:
  108.         os.mkdir(folder)    #创建文件夹
  109.     os.chdir(folder)    #切换至当前文件夹
  110.    
  111.     url='http://jandan.net/ooxx/'

  112.     page_num=int(get_page(url)) #抓取网页中的数字代码

  113.     for i in range(pages):
  114.         page_num-=i
  115.         page_url=url+'page-'+str(page_num)+'#comments'
  116.         img_addrs=find_imgs(page_url)   #获取图片地址,保存成列表
  117.         save_imgs(folder,img_addrs)

  118. if __name__=='__main__':
  119.     #获取代理ip将它保存在本地ini文档中
  120.     download_ip()
  121.     #download_mm()
  122.         
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-10-15 23:38:54 | 显示全部楼层
正则表达式匹配不到ip地址,修改下你的正则表达式。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-18 00:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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