文档章节

python爬虫v.20

x
 xjplab
发布于 2016/01/26 20:09
字数 505
阅读 37
收藏 0

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





© 著作权归作者所有

共有 人打赏支持
x
粉丝 2
博文 1
码字总数 505
作品 0
济南
私信 提问
5个python爬虫教材,让小白也有爬虫可写,含视频教程!

认识爬虫   网络爬虫,如果互联网是一张蜘蛛网,网络爬虫既是一个在此网上爬行的蜘蛛,爬了多少路程即获取到多少数据。 python写爬虫的优势   其实以上功能很多语言和工具都能做,但是用...

柯西带你学编程
2018/06/12
0
0
关于Python面试的四点,你做到就万事大吉了!

第一点:Python 因为面试的是Python爬虫岗位,面试官大多数会考察面试者的基础的Python知识,包括但不限于: Python2.x与Python3.x的区别 Python的装饰器 Python的异步 Python的一些常用内置...

糖宝lsh
2018/09/29
0
0
分享我自己写的一套Python爬虫学习经验

最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多。学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫感兴...

崔庆才
2015/02/23
3.7K
25
起薪2万的爬虫工程师,Python需要学到什么程度才可以就业?

爬虫工程师的的薪资为20K起,当然,因为大数据,薪资也将一路上扬。那么,Python需要学到什么程度呢?今天我们来看看3位前辈的回答。 1、前段时间快要毕业,而我又不想找自己的老本行Java开发...

糖宝lsh
2018/12/15
0
0
福利 | Python专场竞技,这些书给你加把力!

端午节将至,各地龙舟备战竞技,粽子部队也整装待发。小编掐指一算,这种热闹的时节,是时候展现真正的技(fu)术(li)了! (“Python号”龙舟闪亮登场!) Python作为当下最流行的编程语言...

2018/06/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊flink的Async I/O

序 本文主要研究一下flink的Async I/O 实例 // This example implements the asynchronous request and callback with Futures that have the// interface of Java 8's futures (which is t......

go4it
10分钟前
0
0
一文详解微服务架构的数据设计

微服务是一个软件架构模式,对微服务的讨论大多集中在容器或其他技术是否能很好的实施微服务这些方面。 本文将从以下几个角度来和大家分享在微服务架构下进行数据设计需要关注的地方,旨在帮...

java菜分享
20分钟前
1
0
Java并发编程之美读书笔记-并发编程基础1

线程 进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,比如idea运行代码时的jvm是一个进程,但是CPU资源比较特殊,它是被分配到线程的,线程是进程的一个执行路...

hensemlee
33分钟前
1
0
【剑指offer纪念版】--10 进制1的个数

10. 题目 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。 解题思路   把一个整数减去1,再和原整...

细节探索者
48分钟前
1
0
本科毕业平均年薪 30 万!经济寒冬挡不住 AI 人才的火热!

互联网行业遭遇寒冬,企业纷纷裁员缩招,而 BAT 和硅谷明星公司对 AI 人才的投入却并不见放缓。为争夺相关人才,给应届毕业生开出的平均年薪高达 30 万。 而 TensorFlow 作为当下最流行的深度...

AI女神
54分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部