python爬虫v.20
博客专区 > xjplab 的博客 > 博客详情
python爬虫v.20
xjplab 发表于2年前
python爬虫v.20
  • 发表于 2年前
  • 阅读 29
  • 收藏 0
  • 点赞 1
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: python 爬虫

初学python,发现用python写爬虫很方便,顺便把自己的代码贴出来和大家分享交流,欢迎大家多指点

这个爬虫是自己写的第二个版本

使用版本:python 2.7

#coding:utf-8
import urllib2,re,os
from urllib import *
from time import sleep

class spider:
  def __init__(self):
    self.lst_girl=[]
    self.lst_fail=[]
    self.lst_use=[]
    self.PATH=os.getcwd()
    self.host='http://www.zngirls.com'
  def saveimg(self,fdir,img_url):
    fn=img_url.split('/')[-1] #图片文件名
    try:
      data=urllib2.urlopen(img_url,timeout=20).read()
      f=open(fdir+'\\'+fn,'wb')
      f.write(data)
      f.close()
      print 'save image ===========  ok'
    except:
      print 'save image error ==== OK'
      f=open(fdir+'\\err.txt','w')
      f.write(img_url)
      f.close()
    
  def mkdir(self,fdir):
    ie=os.path.exists(fdir)
    if not ie:
      os.makedirs(fdir)

  #获取所有列表
  def getgirllist(self):
    url='http://www.zngirls.com/ajax/girl_query_total.ashx'
    c='%E9%9F%A9%E5%9B%BD'  #日本的urlencode
    tmp=unquote(c)
    #temp=unquote(p)     #url double encode
    country=unquote(tmp)
    #profe=unquote(temp)
    hd={'Host':'www.zngirls.com',
        'User-Agent':'Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20100101 Firefox/17.0',
        'Referer':'http://www.zngirls.com/find/',
        'X-Requested-With':'XMLHttpRequest'
        }
    i=1
    go=True
    lst_count=[]
    while go:
      postdata={'country':country,
              'curpage':str(i),
              'pagesize':'20'
              }
      post_data=urlencode(postdata)
      req=urllib2.Request(url,post_data,hd)
      html=urllib2.urlopen(req).read()
      pat=re.compile('/girl/[\d]+')
      lst_url=re.findall(pat,html)
      lst_count+=lst_url
      print '初始化完成页数: ' +str(i)
      if len(lst_url)>1:
        go=True
        i+=1
      else:
        go=False
      
    glst=list(set(lst_count))
    fp=open('list.txt','w')
    for s in glst:
      fp.write(s+'\n')
    fp.close()
    print '初始化完成 ================ OK'
    print '获取数据长度: '+ str(len(glst))
    return glst
  
    #处理数据
  def solvedata(self,html):
    pat=re.compile("value='(.*?)'")
    found=re.findall(pat,html)
    
    ipat=re.compile('<td colspan="3">(.*?)</textarea></td>',re.S)
    tmp=ipat.search(html).group(1)
    info=re.sub('<[^>]+>','',tmp)
    info=info.replace('&nbsp;','')
    fdir=os.getcwd()+'\\spider\\'+found[0]
    print fdir
    self.mkdir(fdir)
    fp=open(fdir+'\\list.txt','w')
    for opt in found:
      fp.write(opt+'\n')
    fp.write(info)
    fp.close()
    print 'write file ======  ok'
    #===image ================
    im=re.compile("class='imglink' href='(.*?)'><img",re.I)
    imglink=im.search(html).group(1)
    self.saveimg(fdir,imglink)

  def main(self):
    url='http://www.zngirls.com'
    fp=open('list.txt','r')
    buf=fp.read()
    if len(buf)<250:
      self.lst_girl=self.getgirllist()
    else:
      self.lst_girl=buf.split('\n')
      print '读取缓冲完成 === ok'
    print '数据长度:  '+str(len(self.lst_girl))
    
    hd={'Host':'www.zngirls.com',
          'User-Agent':'Mozilla/5.0 (Windows NT 5.1; rv:17.0)',
          'Referer':'http://www.zngirls.com/'
        }
    for s in self.lst_girl:
      g_url=url + s
      if os.path.exists(os.getcwd()+'\\spider\\'+ s[s.rfind('/')+1:]):
        print s +'exist'
      else:
        try:
          req=urllib2.Request(g_url,headers=hd)
          html=urllib2.urlopen(req).read()
          self.solvedata(html)
          #self.lst_use.append(s)
          sleep(2)
        except urllib2.URLError,e:
          self.lst_fail.append(s)
          print '1.error:'+ str(e.reason)
          sleep(5) 
    fp=open('err.txt','w')
    for err in self.lst_fail:
      fp.write(err+'\n')
    fp.close()
    print "spider success"
    
craw=spider()
craw.main()





  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 1
博文 2
码字总数 842
×
xjplab
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: