我是靠谱客的博主 认真吐司,最近开发中收集的这篇文章主要介绍python爬虫v.20,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

初学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()





转载于:https://my.oschina.net/u/860827/blog/610026

最后

以上就是认真吐司为你收集整理的python爬虫v.20的全部内容,希望文章能够帮你解决python爬虫v.20所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部