文档章节

python爬虫v.20

x
 xjplab
发布于 2016/01/26 20:09
字数 505
阅读 35
收藏 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
博文 2
码字总数 842
作品 0
济南
Python学到什么程度才可以去找工作?掌握这4点足够了!

大家在学习Python的时候,有人会问“Python要学到什么程度才能出去找工作”,对于在Python培训机构学习Python的同学来说这都不是问题,因为按照Python课程大纲来,一般都不会有什么问题,而对...

p柯西
06/27
0
0
Python异步加载爬虫,护士私密照源源不断,Ajax抓取速度惊人!

利用aiohttp这个库来进行异步协程提速! 如果Python爬虫不仅在代码编写上展现速度,而且在爬取过程中表现出优越感,最好的就是去下载图片吧,而下载图片最好的代表当然是......我就不多说了。...

Python新世界
07/17
0
0
学Python需要天赋吗?看完弟弟编写的爬虫与爆破脚本,只有汗水!

Python学习记录脚本,希望弟弟通过练习编写脚本一点点提升自己很菜的编程水平~~明天会更好,希望自己越来越强吧。 实现原理 Python3 实现批量查询网站的百度权重以及收录情况,利用的是站长之...

Python新世界
07/24
0
0
5个python爬虫教材,让小白也有爬虫可写,含视频教程!

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

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

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

糖宝lsh
09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
5
0
现场看路演了!

HiBlock
昨天
16
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
9
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
19
0
TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部