• 4大经典爬虫模块应用操作


    什么是爬虫:

    是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫

    采用python作为爬虫的优点:

    大量第三方库,开发效率高,代码少,应用性广泛

    网络爬虫的基本工作流程如下:

        1.首先选取一部分精心挑选的种子URL;

        2.将这些URL放入待抓取URL队列;

        3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

        4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。

    urllib模块

    介绍:

    urllib模块提供的上层接口,使我们可以像读取本地文件一样读取www和ftp上的数据

    实战例子

    项目原理:打开网址-获取源码-找到图片-匹配下载

    #coding=utf-8

    '''

    Created on 2017年1月28日

    @author: gaojs

    '''

    import urllib,re,os

    def getHtml():

        page=urllib.urlopen('http://www.wmpic.me/meinv/').read()#打开网址并且读取

        return page

    x=0

    def getimg(page):

        imgre=re.compile(r' src="(.*?)" class=')

        imglist=re.findall(imgre,page)

        for imgurl in imglist:

    #         print imgurl

            global x

            if not os.path.exists('/Users/gaojs/Desktop/pic'):

                print os.mkdir('/Users/gaojs/Desktop/pic/')

            else:

                urllib.urlretrieve(imgurl,'/Users/gaojs/Desktop/pic/'+'%s.jpg'%x)#下载图片到指定位置

                x+=1

                print u'正在下载第%s张'%x

           

    l=getHtml()

    getimg(l)

    urllib2模块

    urllib与urllib2区别

    1.在python中,urllib和urllib2不可相互替代的。

    2.整体来说,urllib2是urllib的增强,但是urllib中有urllib2中所没有的函数。

    3.urllib2可以用urllib2.openurl中设置Request参数,来修改Header头。如果你访问一个网站,想更改User Agent(可以伪装你的浏览器),你就要用urllib2.

    4.urllib支持设置编码的函数,urllib.urlencode,在模拟登陆的时候,经常要post编码之后的参数,所以要想不使用第三方库完成模拟登录,你就需要使用urllib。

    5.urllib一般和urllib2一起搭配使用。

    6.urllib2解决禁止爬虫,模拟浏览器,加上头部信息headers

    实战例子

    #coding=utf-8

    '''

    Created on 2017年1月19日

    @author: gaojunsong

    爬取百度小说

    '''

    import re,urllib2

    class BDTB:

        baseurl="http://tieba.baidu.com/p/4896490947?pn="

       

        def getpage(self,pageNo):

            url=self.baseurl+str(pageNo)

            request=urllib2.Request(url)#构造对象

            response=urllib2.urlopen(request).read()

            return response

        def gettitle(self,pageNo):

            html=self.getpage(pageNo)

            reg=re.compile(r'title="【原创】(.*?)"')

            items=re.findall(reg,html)

            for item in items:

                with open('a.txt','w')as tp:

                    tp.write('标题'+' '+'<<'+item+'>>')

            return items

        def getcontent(self,pageNo):

            html=self.getpage(pageNo)

            reg=re.compile(r'class="d_post_content j_d_post_content ">            (.*?)</div><br>',re.S)

            rq=re.findall(reg,html)

            for i in rq:

                removea=re.compile('<a.*?>|</a>')

                removeb=re.compile('<img.*?>')

                removec=re.compile('http.*?.html')

                i=re.sub(removea,'',i)

                i=re.sub(removeb,'',i)

                i=re.sub(removec,'',i)

                i=i.replace('<br>','')

                i=i.replace('嗯,这是第二次开小说贴,肯定有人看过,看过的可以再看一次','')

                i=i.replace('随意镇','')

                with open('a.txt','a')as tp:

                    tp.write(' '+i)

               

          

            return rq

          

    l=BDTB()

    for i in range(1,6):

        print '正在读取第%s页小说'%i

        l.getpage(i)

        l.gettitle(i)

        l.getcontent(i)

           

           

    request模块

    实战例子

    对网址发送一个请求post/get,获取源码text和content

     bsp模块

    bsp全称:BeautifulSoup(优势:不需要写正则表达式)

    介绍:

    Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

    Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

    Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

     实战例子

    #例子:如何获取标签内容

    #encoding=utf-8

    from bs4 import BeautifulSoup

    html='<title>welcome to gloryroad</title><div>join gloryroad soon<div>'

    soup=BeautifulSoup(html,'html.parser')#解析方式

    print soup.div

    print soup.title

    #如何打开文件获取内容

    新建html文件,写入内容‘欢迎同学加入光荣之路测试开发班级,跟吴老一起学习’

    #encoding=utf-8

    from bs4 import BeautifulSoup

    soup=BeautifulSoup(open('a.html'),'html.parser')#解析方式

    print soup.prettify()#打印本地文件内容,格式化打印内容

    urllib urllib2 bsp综合案例

     实战例子

    #encoding=utf-8

    '''

    爬取豆瓣网,美臀图片,并且存在指定目录下

    用到的知识点,urllib,urllib2,bsp,shutil,os

    '''

    import urllib,urllib2,os

    from bs4 import BeautifulSoup

    import sys

    from pip.index import Link

    import shutil

    reload(sys)

    sys.setdefaultencoding('utf-8')#输出的内容为utf-8格式

    x=0

    '''

    判断目录是否存在,如果不存在则创建

    如果存在,删除目录以及下面所有文件,避免重复下载

    '''

    if not os.path.exists('/Users/gaojs/Desktop/pigu'):

            os.mkdir('/Users/gaojs/Desktop/pigu/')

    else:

        shutil.rmtree('/Users/gaojs/Desktop/pigu/')#shutil比os好在于可以删除不为空的目录

        os.mkdir('/Users/gaojs/Desktop/pigu/')

    def spider(url):

        headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}

        req=urllib2.Request(url,headers=headers)

        page=urllib2.urlopen(req,timeout=20).read()

        soup=BeautifulSoup(page,'html.parser')#解析方式parser

        my_girl=soup.find_all('img')

        for girl in my_girl:

            link=girl.get('src')

    #         print link

            global x

            urllib.urlretrieve(link,'/Users/gaojs/Desktop/pigu/'+'%s.jpg'%x)#下载图片到指定位置

            x+=1

            print u'正在下载第%s张'%x

    for page in xrange(1,3):

        page+=0

        url='http://www.dbmeinv.com/dbgroup/show.htm?cid=6&pager_offset=%s'%page

        print '第'+str(page)+'页'

        spider(url)

       

    spider(url)

  • 相关阅读:
    Dubbo限制大数据传输的解决方案
    出现The folder is already a source folder
    用Eclipse进行远程Debug代码
    Scanner和BufferReader之区别
    IO操作中的建议
    Android Serialization序列化
    flash画图API:解析obj格式
    UVA 6475 Effective Infection Time
    swift user guide.pdf下载
    【cocos2d-x制作别踩白块儿】第一期:游戏介绍
  • 原文地址:https://www.cnblogs.com/tom-gao/p/6645869.html
Copyright © 2020-2023  润新知