zoukankan      html  css  js  c++  java
  • Python爬虫(小练习)

    近日,在浏览伯乐在线(http://blog.jobbole.com/29281/)的时候碰到一些很不错的资源:25本免费的Python电子书

    如下图:


    其中,每本都是以名字+超链接的方式,于是激起了我写个小程序保存这些资源的欲望,顺便也能练习一些不太熟练的小爬虫 : ) 。 好了,我们开始吧!

    先展示一下成果给大家看嗯: 如图

     

    每本书都很有条理的保存在本地文档中,结果还是挺满意的哈。  

    首先呢 要完成这些工作大概要分为一下几个步骤:

      1. 获得整个页面的源代码 (网页源码HTML)

      2. 获得目标区域的源代码 (缩小范围)

      3. 在小范围内匹配资源的URL

      4. 将匹配到的资源URL写入到本地保存

    下面,将分为4个步骤来分部展示Python程序

    第一,获得整个页面的源代码:

    1 def getHtml(url):
    2     html = urllib.urlopen(url)
    3     sorce = html.read()
    4     return sorce

      该段代码将返回资源所在的整个页面的HTML源代码

    第二,获得目标区域的源代码 (缩小范围):

    1 def getRange(content):
    2     start0 = content.find(r'<div class="entry">')
    3     start = content.find(r'<ol>',start0)
    4     end = content.find(r'<div id="ad1">',start)
    5     content2 = content[start:end]
    6     return content2

    第三,匹配资源的URL:

    1 def getLink(content2):
    2     reg = re.compile(r'<a href="(.*?[.html|.pdf]?)" target=')
    3     result = reg.findall(content2)
    4     return result
    5 
    6 def getName(content2):
    7     reg = re.compile(r'<a href=".*?[.html|.pdf]?" target="_blank">(.*?)</a>')
    8     result2 = reg.findall(content2)
    9     return result2

      以上俩个函数分别用来匹配资源的 链接 和 书名

    第四,保存到本体:

      即是在print 的基础上从定向到文件中。详见下面的完整代码 : )

    下面是完整代码:

     1 #!/usr/bin/env python
     2 #coding:utf-8
     3 
     4 import urllib
     5 import re
     6 
     7 def getHtml(url):
     8     html = urllib.urlopen(url)
     9     sorce = html.read()
    10     return sorce
    11 
    12 def getRange(content):
    13     start0 = content.find(r'<div class="entry">')
    14     start = content.find(r'<ol>',start0)
    15     end = content.find(r'<div id="ad1">',start)
    16     content2 = content[start:end]
    17     return content2
    18 
    19 def getLink(content2):
    20     reg = re.compile(r'<a href="(.*?[.html|.pdf]?)" target=')
    21     result = reg.findall(content2)
    22     return result
    23 
    24 def getName(content2):
    25     reg = re.compile(r'<a href=".*?[.html|.pdf]?" target="_blank">(.*?)</a>')
    26     result2 = reg.findall(content2)
    27     return result2
    28 
    29 if __name__ == '__main__':
    30     content = getHtml(r'http://blog.jobbole.com/29281/')
    31     content2 = getRange(content)
    32     link = getLink(content2)
    33     name = getName(content2)
    34     i = 1
    35     f = open('content.txt','w+')
    36     for x, y in zip(name, link):
    37         print >>f, str(i),": ",x,
    38         print >>f
    39         print >>f,y
    40         i = i + 1

    看到这里您辛苦了,谢谢 : )

    —————————————————————————————————————————————————————————————————————————————

    声明:

      本文为 大Yi巴狼 对自己所学的知识整理和实现。

      本文档欢迎自由转载,但请务必保持本文档完整或注明来之本文档。本文档未经 大Yi巴狼 同意,不得用于商业用途。最后,如果您能从这个简单文档里获得些许帮助,大Yi巴狼 将对自己的一点努力感到非常高兴;由于作者本人水平有限,如果本文档中包含的错误给您造成了不便,在此提前说声抱歉。

      祝身体健康,工作顺利。

  • 相关阅读:
    li排序
    appendChild的用法
    单选框和下拉框的jquery操作
    Dom操作高级应用
    DOM操作应用
    自己写的sql排序
    odoo10学习笔记七:国际化、报表
    odoo10学习笔记六:工作流、安全机制、向导
    odoo10学习笔记五:高级视图
    odoo10学习笔记四:onchange、唯一性约束
  • 原文地址:https://www.cnblogs.com/kba977/p/python.html
Copyright © 2011-2022 走看看