美文网首页人人可以学Python@IT·互联网程序员
简单的爬虫:爬取网站内容正文与图片

简单的爬虫:爬取网站内容正文与图片

作者: HiWoo | 来源:发表于2017-05-09 13:37 被阅读1097次

    我们来写个简单的爬虫####

    需要用到的模块

    需要用到python的urllib和lxml模块,urllib为python的自带模块,lxml需要自行安装:

    pip install lxml
    

    简单介绍urllib和lxml的使用

    我们使用urllib来爬去一个网页比如:

    In [1]: import urllib
    
    In [2]: # 爬起豆瓣首页
    
    In [3]: html = urllib.urlopen("https://www.douban.com/").read()
    
    In [4]: # 整个html打印出来太多,这里我们就保存在文件中,再查看
    
    In [5]: of = open("db_index.html","w")
    
    In [6]: of.write(html)
    
    In [7]: of.close()
    

    使用lxml主要用于解析网页(这里只是简单示范),比如:

    In [8]: from lxml import etree
    
    In [9]: html = u'<div class="test1"><h1>我是标题</h><p>哈哈哈哈</p></div></html>'
    In [10]: # 我们如何获取class为test1的div标签中的文字呢?
    
    In [11]: selector = etree.HTML(html)
    
    In [12]: text = selector.xpath("//div[@class='test1']//text()")
    
    In [13]: print text
    [u'\u6211\u662f\u6807\u9898', u'\u54c8\u54c8\u54c8\u54c8']
    
    In [14]: # 很明显是个list
    
    In [15]: for t in text:
        ...:     print t
        ...:     
    我是标题
    哈哈哈哈
    
    In [16]: # 当然也可以单独获取标题
    
    In [17]: text = selector.xpath("//div[@class='test1']/h1/text()")
    
    In [18]: print text[0]
    我是标题
    

    爬取“下厨房”网站的教程

    因为网站中同一类型的页面的html代码结构都一样,所以我们只需要写一套解析代码就能用在它所有的同类型的页面中。
    我们爬取下厨房的教程的内容页面,代码如下:

    #!/usr/bin/env python
    #-*-coding:utf-8-*-
    import urllibfrom lxml 
    import etree
    # 获取网页html,拿"下厨房"这个网站来示例
    html = urllib.urlopen("http://www.xiachufang.com/recipe/102272250/").read()
    selector = etree.HTML(html)
    '''
    一个网站中相同类型的页面的结构基本都是一样的,
    所以我们下面写得适合这个网站所有的同类型页面
    '''
    # 获取内容标题
    title = selector.xpath('//title/text()')[0]
    print("标题: {}".format(title))
    # 获取作者昵称
    author= selector.xpath("//div[@class='author']//span/text()")[0]
    print("作者: {}".format(author))
    # 作者头像链接
    portraits_url = selector.xpath("//div[@class='author']//img/@src")[0]
    print("头像链接:{}".format(portraits_url))
    # 保存头像# 保存在当前目录
    imgname = "portraits_{}".format(portraits_url.split("?")[0].split("/")[-1])
    urllib.urlretrieve(portraits_url, filename=imgname)
    # 获取正文:作者的前言
    contents1 = selector.xpath("//div[@class='desc mt30']/text()")
    for c in contents1:
        print c
    # 获取正文:教程用料
    contents2 = selector.xpath("//div[@class='ings']/text()")
    for c in contents2:
        print c
    # 获取步骤正文中的每一步的<p>代码块
    contents3 = selector.xpath("//div[@class='steps']//p[@class='text']/text()")
    # 获取步骤正文中的全部图片
    imgurls = selector.xpath("//div[@class='steps']//img/@src")
    for c in contents3:
        # 获取每一步骤的文字并打印   
        print c
    l = len(imgurls)
    for i in range(0, l):
        print imgurls[i]
    # 保存图片:   
    # 保存在当前目录   
    imgname = "img{}_{}.jpg".format(i, title)
    urllib.urlretrieve(imgurls[i], filename=imgname)
    

    运行看下:

    (venv) allenwoo@~/renren/code$ python crawl.py 
    标题: 【设计师的品质早餐——能量爆炸三明治的做法】设计师的品质早餐——能量爆炸三明治怎么做_设计师的品质早餐——能量爆炸三明治的家常做法_下厨房
    作者: 细嗅蔷薇natalie
    头像链接:http://s2.cdn.xiachufang.com/2ced0090ebfa11e594d1b82a72e00100.jpg?imageView2/1/w/60/h/60/interlace/1/q/90
    
            我是一个时装设计师,追求品质不仅体现在服装上,也体现在美食中。百吉福芝士片就是三明治的灵魂,让普通的吐司,肉类和蔬菜也瞬间有范起来。
    这款能量爆炸的三明治作为上班族的外带午餐也是非常好的选择,到了下班都不会饿哦!要做到“爆炸”的效果,那应该尽量塞进更多的食材。需要一张保鲜膜来包紧食材不外漏。因为放的食材多,也要有沙拉酱花生酱这种酱料一个调味第二个起粘合作用,也可以用薯泥,牛油果泥等等又好吃又可以起到粘合作用。
            
    所有食材准备好。
    吐司上面抹上低脂沙拉酱。
    不喜欢吃边的就切掉,我没切。
    放上生菜叶子压一下,再放一片百吉福香浓原味芝士片。
    烤鸡胸切成厚片,如果你想纵向切开就横向摆放,这样切开的横截面比较好看。然后尽量中间堆的厚一点,四边薄。
    牛油果捣成泥作为粘合剂。
    放上番茄片。
    按住吐司的边边把保鲜膜尽量的包紧,要用点巧劲儿啦
    用一把锋利的刀干脆利落切成两半。
    包上油纸美化一下,享用吧!
    http://s2.cdn.xiachufang.com/74c5590a27d411e7947d0242ac110002_5616w_3744h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/74e5229e27d411e7947d0242ac110002_5616w_3744h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/6c52939427cc11e7947d0242ac110002_5616w_3744h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/6d72d51827cc11e7bc9d0242ac110002_5616w_3744h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/6d3c711c27cc11e7947d0242ac110002_5616w_3744h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s1.cdn.xiachufang.com/5b64d93e27cc11e7bc9d0242ac110002_5616w_3744h.jpg@2o_50sh_1pr_1l_300w_90q_1wh
    http://s2.cdn.xiachufang.com/705e7f8e27cc11e7bc9d0242ac110002_5616w_3744h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/c4fa4fda27ce11e7947d0242ac110002_5616w_3744h.jpg?imageView2/2/w/300/interlace/1/q/90
    

    看看下载的图片:

    Paste_Image.png

    我们换一个下厨房的同类型网页再试试:

    比如:早餐卷教程页面,
    http://www.xiachufang.com/recipe/268278/

    (venv) allenwoo@~/renren/code$ python crawl.py 
    标题: 【早餐卷的做法】早餐卷怎么做_早餐卷的家常做法_下厨房
    作者: 虎妈尚菜
    头像链接:http://s2.cdn.xiachufang.com/13d504e3811b11e582e621381ef80f49.jpg?imageView2/1/w/60/h/60/interlace/1/q/90
    
            胡萝卜丝土豆丝海带丝豆腐衣鸡蛋,一起卷入饼中,做早餐内容够丰厚营养够全乎热量还不高,其实做法还是简单至极的。头天晚上将各类菜焯烫至熟,不是炒熟,煮的稍软的都,清新的味道跟炒完全不同。第二天早起在卷饼上贴个热乎的鸡蛋,刷上自己喜欢的甜酱或者辣酱,再卷上提前腌制好的杂菜,3分钟足够的事儿,营养全面又可口的鸡蛋饼就做好了,口感香嫩软,很好吃。
          
    将220克滚开的水倒入加了盐面粉中,用筷子搅拌均匀后再加入冷水30克拌匀
    把面揉成光滑的面团,10分钟左右
    拿出后等量分割成10个小剂子
    将面剂子擀成圆形薄片
    放入电饼铛,盖上盖子半分钟
    然后掀起翻个面再继续盖半分钟即可
    胡萝卜跟土豆洗净后切细丝。豆腐衣要焯烫后再切丝
    将胡萝卜丝、土豆丝、海带丝、豆腐衣,分别用清水焯烫至熟
    捞出后将所有杂菜混在一起,加入生抽、芝麻油拌匀,然后存冰箱,腌制入味,随用随取
    转天一早,先预热电饼铛,然后再切点葱花放入磕了鸡蛋的碗中,并打散
    将一张卷饼放入电饼铛,倒上葱花蛋液,鸡蛋凝固即可取出
    在蛋饼上抹上拌饭酱
    再铺上杂菜
    卷起即可,趁热食用
    胡萝卜跟土豆洗净后切细丝。豆腐衣要焯烫后再切丝
    将胡萝卜丝、土豆丝、海带丝、豆腐衣,分别用清水焯烫至熟。各类菜是清水焯烫,千万不要用油炒,口感不同的
    捞出后将所有杂菜混在一起,加入生抽、芝麻油拌匀,然后存冰箱,腌制入味,随用随取
    转天一早,先预热电饼铛,然后再切点葱花放入磕了鸡蛋的碗中,并打散
    将一张卷饼放入电饼铛,倒上葱花蛋液,鸡蛋凝固即可取出
    在蛋饼上抹上拌饭酱
    再铺上杂菜
    卷起即可,趁热食用
    http://s1.cdn.xiachufang.com/d842a8ac945411e6a9a10242ac110002_216w_330h.jpg@2o_50sh_1pr_1l_300w_90q_1wh
    http://s2.cdn.xiachufang.com/d81316fa945411e6a9a10242ac110002_220w_324h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s1.cdn.xiachufang.com/d7efa6f2945411e6b87c0242ac110003_212w_322h.jpg@2o_50sh_1pr_1l_300w_90q_1wh
    http://s2.cdn.xiachufang.com/d7c617c4945411e6a9a10242ac110002_214w_323h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/d79e01c6945411e6a9a10242ac110002_217w_323h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/d772b78c945411e6b87c0242ac110003_220w_330h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/d743d566945411e6a9a10242ac110002_222w_323h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s1.cdn.xiachufang.com/d70f24ec945411e6a9a10242ac110002_215w_324h.jpg@2o_50sh_1pr_1l_300w_90q_1wh
    http://s2.cdn.xiachufang.com/d6bf2550945411e6b87c0242ac110003_215w_326h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/d682ed1a945411e6a9a10242ac110002_220w_323h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/d656fe26945411e6a9a10242ac110002_217w_322h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/d6245f20945411e6b87c0242ac110003_219w_329h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/d5c232c8945411e6b87c0242ac110003_218w_327h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s1.cdn.xiachufang.com/d58c985c945411e6a9a10242ac110002_219w_331h.jpg@2o_50sh_1pr_1l_300w_90q_1wh
    http://s1.cdn.xiachufang.com/d51f27e0945411e6a9a10242ac110002_219w_323h.jpg@2o_50sh_1pr_1l_300w_90q_1wh
    http://s1.cdn.xiachufang.com/d4e25bc6945411e6b87c0242ac110003_216w_326h.jpg@2o_50sh_1pr_1l_300w_90q_1wh
    http://s2.cdn.xiachufang.com/d4a94cfa945411e6a9a10242ac110002_219w_331h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/d47030f0945411e6a9a10242ac110002_222w_328h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/d443709c945411e6a9a10242ac110002_220w_332h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/d41461d0945411e6a9a10242ac110002_222w_332h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s2.cdn.xiachufang.com/d3c62934945411e6b87c0242ac110003_226w_328h.jpg?imageView2/2/w/300/interlace/1/q/90
    http://s1.cdn.xiachufang.com/d3952c76945411e6b87c0242ac110003_220w_330h.jpg@2o_50sh_1pr_1l_300w_90q_1wh
    

    下载的图片:


    爬去“下厨房”教程页面的简单爬虫就这样喽

    相关文章

      网友评论

      本文标题:简单的爬虫:爬取网站内容正文与图片

      本文链接:https://www.haomeiwen.com/subject/hywbtxtx.html