为了账号安全,请及时绑定邮箱和手机立即绑定

Python开发简单爬虫

蚂蚁帅帅 全栈工程师
难度初级
时长 1小时14分
学习人数
综合评分9.67
646人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • 爬虫简介:

    查看全部
    0 采集 收起 来源:爬虫是什么

    2018-12-09

  • 爬虫的调度端来启动爬虫,停止爬虫,或监视爬虫的运行情况;

    爬虫程序有三个模块:URL管理器、网页下载器、网页解析器

    URL管理器用来管理已经抓取过得URL和将要抓取的URL


    查看全部
  • urllib2下载网页方法1

    查看全部
  • # -*- coding: gb2312 -*-
    import urllib

    class HtmlDownloader(object):
       
       
        def download(self,url):
            if url is None:
                return None
            response = urllib.request.urlopen(url)    #请求这个URL的内容结果存在respon'
            # 如果值不等于200则请求失败
            if response.getcode() != 200:  
                return
            return response.read()   #返回下载好的内容
       

    查看全部
  • class UrlManager(object):
       
        def __init__(self):
            """URL管理器需要维护两个列表,①待爬取的URL列表new_urls;②已爬取的URL列表old_urls"""
            self.new_urls = set()
            self.old_urls = set()
       
        def add_new_url(self,url):
            """ 向管理器中添加一个新的URL,"""
            if url is None:             #如果URL为空,不进行添加
                return
            if url not in self.new_urls and url not in self.old_urls:
                self.new_urls.add(url)  #如果URL就没在待爬取的URL列表里面,又没在已爬取的URL列表里面,将其添加到待爬取的URL列表中
         
        def add_new_urls(self,urls):
            """ 向管理器中添加批量的URL"""
            if urls is None or len(urls)==0:
                return                  #如果URL列表不存在或为空,不进行添加
            for url in urls:
                self.add_new_url(url)   #如果存在,单个添加到待爬取的URL
        
        def has_new_url(self):
            """判断管理器中是否有新的URL"""
            return len(self.new_urls)!=0        #如果new_url列表部位空,就说明还有待爬取的URL,

        def get_new_url(self):
            """从URL管理器中获取一个新的待爬取的URL"""
            new_url = self.new_urls.pop()       #获取一个待爬取的URL,pop会讲待爬取的URL取出,然后移除该URL
            self.old_urls.add(new_url)          #将这个待爬取的URL添加到已爬取的URL列表
            return new_url

    查看全部
    3 采集 收起 来源:URL管理器

    2018-12-05

  • from baike_spider import html_downloader, html_outputer, url_manager
    from lxml.html import html_parser
    from astropy.units import count

    class SpiderMain(object):
        """爬虫总调度程序,会使用HTML的下载器,解析器,输出器来完成功能"""
        def __init__(self):
            """在构造函数中初始化所需要的各个对象"""
            self.urls = url_manager.UrlManager()                  #URL管理器
            self.downloader = html_downloader.HtmlDownloader()    #URL下载器
            self.parser = html_parser.HtmlParser()                #URL解析器
            self.output = html_outputer.HtmlOutputer()            #URL输出器
       
        def craw(self,root_url):
            """爬虫的调度程序,root_url就是入口url,将其添加到URL管理器"""
            count = 1
            self.urls.add_new_url(root_url)                            #添加一个新的未爬取的URL
            while self.urls.has_new_url():
                try:
                    """设置一个异常处理,用来处理网页中已经失效的URL和空的URL"""
                    new_url = self.urls.get_new_url()                  #获取一个待爬取的URL
                    print("crow %d: %s"%(count,new_url))
                    html_cont = self.downloader.download(new_url)      #下载URL页面
                    new_urls, new_data =self.parser.parse(new_url,html_cont)   
                    #调用解析器解析页面数据,得到新的URL列表和新的数据,传入两个参数,传入该URL,和下载的数据
                    self.urls.add_new_urls(new_urls)                   #新的URL列表补充到URLS
                    self.output.collect_data(new_data)                 #收集数据
                   
                    if count == 100:
                        """设置一个循环控制URL的爬取个数"""
                        break
                   
                    count  += 1
                except:
                    print("craw failed")
            self.outputer.output_html()

    if __name__ == '__main__':
        root_url = "http://baike.baidu.com/view/21087.html"       #爬虫入口URL
        obj_spider = SpiderMain()      #调用主函数
        obj_spider.craw(root_url)      #启动爬虫

    查看全部
    3 采集 收起 来源:调度程序

    2018-12-05

  • class UrlManeger(object):
        def __init__(self):
            self.new_urls = set()
            self.old_urls = set()
       
        def add_new_url(self,url):
            # 如果没有URL就返回
            if url is None:
                return
            # 如果URL既没有在待爬取的URL又没有在已爬取的URL,则添加到待爬取 的URL
            if url not in self.new_urls and url not in self.old_urls:
                self.new_urls.add(url)
       
        def add_new_urls(self,urls):
            # 如果urls不存在或列表为空,不进行添加
            if urls is None or len(urls)==0:
                return
            # 将urls列表总的URL逐个添加到new_urls
            for url in urls:
                self.add_new_url(url)
       
        def has_new_url(self):
            return len(self.new_urls) != 0
       
        def get_new_url(self):
            # pop会从列表中获取一个URL,并将其移除
            new_url = self.new_urls.pop()
            self.old_urls.add(new_url )

    查看全部
    0 采集 收起 来源:URL管理器

    2018-12-04

  • 该下载器有以下三种下载方法:

    ①最简洁的方法:给定一个URL,将其传送给urllib2的urlopen方法,就可以实现。对应代码如下:

     

     

    ②添加http header向服务器提交http的头信息,添加data可以向服务器提交需要用户输入的数据,

     

    我们生成三个参数,将其传送给request类,生成一个request对象,再用urllib2的urlopen方法以request为参数,发送网页请求。

     

     

    ③添加特殊情景的处理器:

    例:有的网页需要用户登录才能访问,我们就需要添加cookie的处理,我们使用HTTPCookieProcessor;有的网页需要代理才能访问,我们使用ProxyHandle;有的网页的协议是HTTPS加密访问的,我们使用HTTPSHandler;有的网页的URL是相互自动的跳转,我们使用HTTPRedirectHandler。

    将这些handler传送给urllib2的bulid_opener方法来创建对象,我们给urllib2再install这个opener,这样这个urllib2就具有了处理这些场景的能力,然后依然并用urlopen方法来请求一个URL,或请求一个request实现网页的下载。

    查看全部
  • Python爬虫URL管理器的实现方式(三种)

    (一)将已爬取或和待爬取的URL集合存放在内存中,用Python语言的话,可以将这两个URL集合放在set()数据结构中,Python的set结构可以自动去除重复的内容,

    (二)将URL存放在关系数据库中,建立一个表,有两个字段(url,is_crawled),is_crawled字段标志这个URL的状态是待爬取还是已爬取。

    (三)将URL存放在一个缓存数据库中,比如redis,本身支持set的结构,所以我们可以将待爬取的和已爬取的URL存放在set中。

    查看全部
  • 爬虫URL管理

    URL管理器用来管理已经抓取过得URL集合和将要抓取的URL集合,主要是为了防止循环抓取和重复抓取,

    URL管理器需要支持如下功能:

    添加新URL到待爬取集合中;在添加的过程中判断是否已经存在该URL在管理器中;支持从容器中获取一个待爬取的URL;获取时需要判断容器中是否还有待爬取的URL;该URL被爬取后,我们需要将其移动到已爬取集合。

    查看全部
  • 首先,调度器询问URL管理器有没有待爬取的URL,URL管理器向调度器返回是或否,若为是,则调度器从URL管理器中获取一个待爬URL,URL管理器将这个URL返回给调度器,,,然后调度器将这个URL传送给下载器,让下载器开始下载,下载完成后,下载器将URL内容返回给调度器,,,然后调度器将URL内容传输给解析器进行解析,解析后,解析器返回有价值的数据和新URL列表给调度器,,,调度器将价值数据给应用去收集价值数据,将新的URL列表补充给URL管理器,直到URL全部爬取完毕。

    查看全部
  • 爬虫的调度端来启动爬虫,停止爬虫,或监视爬虫的运行情况;

    爬虫程序有三个模块:URL管理器、网页下载器、网页解析器

    URL管理器用来管理已经抓取过得URL和将要抓取的URL,从中取出一个待爬取的URL将其传送给网页下载器,网页下载器将指定网页内容下载为一个字符串,并将字符串传送给网页解析器进行解析,会解析出有价值的数据和获取该网页中指向其他网页的URL,将新获取的URL补充到URL管理器中,

    查看全部
  • (二)爬虫简介

      爬虫是一段获取自动抓取互联网页面信息的程序,

    互联网的每个网页上都有一个其对应的URL,每个URL又会指向其他的URL,URL的指向关系是错综复杂的,正常情况下我们用人工的方法去获取信息,但是覆盖面太小;

    爬虫可以根据关键词从一个人为指定的URL出发,提取到有关联的网页上的信息,并且提取数据;

    查看全部
    0 采集 收起 来源:爬虫是什么

    2018-12-03

  • (一)本课程仅介绍简单的静态网页爬虫设计

    URL管理器用来管理已经抓取过得URL和将要抓取的URL;

    网页下载器:给定一个URL,需要将网页下载在你到本地以后才能去分析,使用urllib2这个包;

    网页解析器:得到网页之后用解析器提取出我们想要的内容;

    查看全部
  • (十五)实例爬虫

    确定目标--->分析目标(URL格式,数据格式,网页编码)--->编写代码

    分析目标:制定抓取网站数据的策略;

    URL格式:用来限定我们要抓取的页面的范围,如果范围不进行限定的话就会抓取去多不相关的网页,造成资源浪费。

    数据格式:分析每个词条页面的标题等,数据所在的标签的格式。

    网页编码:在代码解析器上指定网页的编码格式,然后才能进行正确的解析。

    词条页面URL不是一个完整的URL,所以需要在代码中补全;

    数据格式在<h1>标签中,

    查看全部

举报

0/150
提交
取消
课程须知
本课程是Python语言开发的高级课程 1、Python编程语法; 2、HTML语言基础知识; 3、正则表达式基础知识;
老师告诉你能学到什么?
1、爬虫技术的含义和存在价值 2、爬虫技术架构 3、组成爬虫的关键模块:URL管理器、HTML下载器和HTML解析器 4、实战抓取百度百科1000个词条页面数据的抓取策略设定、实战代码编写、爬虫实例运行 5、一套极简的可扩展爬虫代码,修改本代码,你就能抓取任何互联网网页!

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!