zoukankan      html  css  js  c++  java
  • Python爬虫学习笔记(一)

    Python是个功能很强大,也很齐全的语言,这在我当初学的时候是不了解的。想想半年前学习python的初衷,无非是是因为ArcGIS提供了python脚本的编译环境,当我知道ArcToolbox里那些功能强大的工具,有一部分竟然就是用所谓python写出来的,自然也就想着去尝试,简化那些冗杂的工作,这也是我喜欢编程的一个原因。

    不过说实话,python断断续续的学到现在,也没写出什么脚本工具,但怎么也说不能算没有一点收获:起码学会了一门语言呢。虽然离当初的目标有些偏离,但是学习本身,是没什么坏处的,因为你总会意外的收获到其他的东西。

    Python是开源的,所以除了官方的库之外,有很多第三方的库,可以做很多事情,像科学计算,机器学习,搭建网站的框架,还有,当然了,就是爬虫,想想就很有意思。目前也是刚接触,numpy是跟着一本书学,爬虫的话,就是在网上找资料,参照着别人的案例。

    今天写的第一个,就是参照虫师老师的一篇博客http://www.cnblogs.com/fnng/p/3576154.html。这个例子,说的是如何从一个网页中,将所有的图片下载到本地,并编号,在看代码之前完全是没有一点概念的,看完之后就感觉,整个过程并不复杂,python提供了功能相当强大的urllib库,代码也很简单。

    1、导入相关库

    # python读取网页的库

    import urllib

    # 正则表达式有关模块

    import re

    这里说一说正则表达式,正则表达式(Regular Expression)是很复杂的,不只有python有,像Java, C#都有,说白了就是编写一定的规则来匹配字符串,掌握基础的就已经够用,复杂的以后还得慢慢学,这里还是推荐廖雪峰老师的个人网站http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832260566c26442c671fa489ebc6fe85badda25cd000,上手不困难

    2、获取网页的html

    def getHTML(url):

    # 类似于文件的打开

    page = urllib.urlopen(url)

    # 类似于文件的读取

    html = page.read()

    return html

    考虑到之后的使用的方便,这里将这个方法进行了封装,写成一个函数,代码很简单,和文件的读取很类似。

    3、编写正则表达式

    这个其实是整个个爬虫过程最复杂的一部分。因为网站的内容相差很大,想要提取的信息也是不一样的,所以没有一个万能的正则表达式,得就事论事。

    接下来就具体分析一个网页,html+css+Javascript接下来还得继续学习。

    比如说这个网站http://tieba.baidu.com/p/4571038933?see_lz=1里面有很多图片,在Chrome里按住F12查看源代码,会发现,这里面所有的图片都链接到一个网址,并且格式如下:

    我们所需要的,就是提取src=""里面的链接。

    代码如下:

    def getImag(html):

    # 这里是通过compile将字符串编译成一个正则对象

    # re.S表示多行匹配,比较常用

    pattern = re.compile('<img class="BDE_Image".*?"(.*?)"', re.S)

    # re.findall以列表形式返回匹配到的子串,也常见match(从头匹配),search(任意匹配)

    imags = re.findall(pattern, html)

    这个函数正则表达式部分已经写完,但只完成了一半,接下来就是根据提取到的链接,来下载文件并保存到本地

    4、获取图片

    # t负责给文件编号

    t = 1

    for img in imags:

    # 使用urltrieve从链接中获取文件

    urllib.urlretrieve(img, 'D:LearnCodepythonpachongphoto\%s.jpg' % t)

    t += 1

    5、试运行

    url = 'http://tieba.baidu.com/p/4571038933?see_lz=1'

    html = getHTML(url)

    getImag(html)

    就可以在文件夹中等着接收文件吧

    的确是很有成就感。

    6、下面就来完善代码吧

    在这个网站中,我发现了更为有趣的用法http://www.nowamagic.net/academy/detail/1302861

    参阅帮助文档,可以发现urlretrieve有个回调函数

    具体可以这样来用,写一个回调函数Reporthook()

    def Reporthook(a, b, c):

    # a:已经下载的数据块,b:数据块的大小,远程文件的大小

    per = 100 * a * b / c

    if per > 100:

    per = 100

    print '%.2f%%' % per

    然后在urlretrieve()的里面增加一个名为Reporthook的参数即可

    相当有意思!!!!!

    总结:

    1、关于爬虫,没有找到有关的书籍。但是,但是,网络上的资源其实是相当丰富的,尤其是很多技术博客,作者写的都相当的详细,参照着学,收获是很大的,以上我写的都是在网上找到的。见贤思齐焉,遇到不会的,就去学习好了。

    2、python官方文档,讲的虽然不详细,但简明扼要,都是核心的东西,多看看,会发现很多的盲点,就像这个例子里的回调函数,很多人估计在学爬虫的时候都没有使用过。

    3、爬虫会接触到很多网页前端的内容,接下里要想爬的更好,就得学html+css+javascript,甚至是分布式

    却道,此心安处是吾乡
  • 相关阅读:
    a-b(高精度)
    a+b(高精度)[陈涛]——c语言
    |-病毒集锦-|(!长期更新!)
    2016/7/7 二分警察(搜查)~#递归打法好!
    2016/7/7 自定义函数copy
    2015/7/6 (!长期更新!)C语言从零——张呵呵
    2016/7/6 高精准计算器-减(神·高精准)
    2016/7/6 神·CPU的人类极限在哪?
    2016/7/6 真·高精度计算器-加 (火速跟完!!!)
    2016/7/6 准·高精度计算器-加
  • 原文地址:https://www.cnblogs.com/lucifer25/p/5796972.html
Copyright © 2011-2022 走看看