Python学习笔记(一)

文章始于:2017年9月30日

国庆期间,打算学习一些机器学习的算法,和工具(TensorFlow),学习当然要从基础学起了,而机器学习的基础就是Python咯,准备在这段学习期间做几期Python笔记,希望大家关注~~~
注:这次主要通过做一些实践项目、小功能来学习Python,对语法基础部分就不赘述啦~


编写Python使用的是PyCharm:一款口碑好、实用的Python IDE

第一次笔记讲述:Python爬虫,对指定网页的图片进行抓取、下载和保存

Python爬虫

(一)概述

使用到的工具:

  • urllib库:一款用于爬虫的库,它提供了一些方法,如建立网络连接、抓取HTML文件代码,它让整个爬虫过程简单了许多。
    urllib推出了两个版本,urllib和urllib2:这两种版本是不可以相互替代的,所以常常两个库一起引用。

    import urllib
    import urllib2

    import“输入、进口”,用来应用各种API接口,库等。

(二)代码详解

先奉上完整版代码:

#coding:utf-8
#编码声明为utf8

import re
import urllib
import urllib2

#---基本的网页抓取---#
def GetHtmlCode(url):
    #抓取网页代码
    request = urllib2.urlopen(url)
    html = request.read()
    return html

def GetImg(html):
    reg = r'src="(.+?\.jpg)"' #正则表达式,表示图片地址
    img = re.compile(reg) #将正则表达式编译为正则对象
    imgList = re.findall(img, html) #读取包含img(正则表达式)的数据
    x = 0
    for imgi in imgList:
        #图片地址通过for循环遍历、保存到指定路径
        print r'正在保存第',x+1,'张图片'
        #urllib.urlretrieve()方法,直接将远程数据下载到本地,图片通过x依次递增命名
        urllib.urlretrieve(imgi, 'D:\pics\%s.jpg' %x)
        x += 1
    return x #返回图片总数

HTML = GetHtmlCode("http://desk.zol.com.cn/qiche/p4/")
print GetImg(HTML)

这段代码,抓取的是ZOL汽车壁纸主页上的所有JPG图片,图片直接通过urllib.urlretrieve() 保存到D盘的‘pics’文件夹中。

— 详解 —

下面开始分析代码:

#coding:utf-8
#编码声明为utf8
  • 文件的编码声明——必须写在开头。代表着这段代码允许使用UTF8编码,一种中文编码,如果需要在文件里面加入中文字符串,包括注释等等,都要添加这段代码哦。so,作为一名中国程序员,#coding:utf-8应该是必不可少的了。
import re
import urllib
import urllib2
  • 引用库(模块)re、urllib、urllib2,re是正则表达式模块,在提取图片时使用到了这个库。
#---基本的网页抓取---#
def GetHtmlCode(url):
    #抓取网页代码
    request = urllib2.urlopen(url)
    html = request.read()
    return html
  • 代码功能,在注释中已经明确:基本的网页抓取,无任何复杂操作。

  • 输入参数:url 参数 url 表示远程数据的路径,一般是 http 或者 ftp 路径。例如:“http://www.baidu.com”

  • 返回值:html 它被定义在方法中,是被抓取网页的整串HTML代码。
  • 作为Python,并没有{ 、} 、;作为结束终止符,一切都有格式代替了,所以Python对格式的要求也是显而易见了,这无疑增强了Python的可阅读性和美观性。
  • Python中,函数被定义后:def GetHtmlCode(url): ,‘:’表示进入这段函数代码。函数内的每一行代码,与定义语句始终保持一个跳格符的位置关系,这个规则贯穿整个Python,其实就是跳格符代替了其他语言的结束终止符。

  • 方法GetHtmlCode(url) 详解:

    • request = urllib2.urlopen(url) 使用urllib2库中的方法urlopen(url) 这个方法的作用是:访问URL路径,返回一个类文件对象,赋值给request
    • html = request.read() request类文件对象提供了方法read() ,读取对象中的数据,转为字符串形式输出给html ,即整段网页的HTML代码。
    • 值得注意的是,Python的变量是不需要进行类型说明的,它由方法返回值的类型直接决定。
def GetImg(html):
    reg = r'src="(.+?\.jpg)"' #正则表达式,表示图片地址
    img = re.compile(reg) #将正则表达式编译为正则对象
    imgList = re.findall(img, html) #读取包含img(正则表达式)的数据
    x = 0
    for imgi in imgList:
        #图片地址通过for循环遍历、保存到指定路径
        print r'正在保存第',x+1,'张图片'
        #urllib.urlretrieve()方法,直接将远程数据下载到本地,图片通过x依次递增命名
        urllib.urlretrieve(imgi, 'D:\pics\%s.jpg' %x)
        x += 1
    return x #返回图片总数
  • 代码功能:提取html里符合规则的图片。

  • 方法GetImg(html) 详解:

    • 一些语句的含义已在注释里注明,这里不再重复,下面主要对语法进行讲解
    • r'src="(.+?\.jpg)"' 这是一种Python字符串的表达形式,带r前缀的字符串,不需要转义符,如果需要换行,直接在字符串书写时,进行换行即可。
    • Python的for循环:
      for[空格]临时变量[空格]in[循环对象]:

      for[空格]临时变量[空格]in[空格]range([起始值], [终了值], [步数step]): ,Python语法中,默认的初始值为0,步数为1,所以简单的0-100遍历可以简写为for i in range(100)
    • Python的打印输出十分简洁:print [字符串1],[字符串2] 就可以实现两个字符串的拼接输出。
HTML = GetHtmlCode("http://desk.zol.com.cn/qiche/p4/")
print GetImg(HTML)

最后,就是实现代码了,只有两行,首先输入路径url得到读取后的代码字符串HTML:HTML = GetHtmlCode("http://desk.zol.com.cn/qiche/p4/") ,然后提取图片,最后输出图片总数print GetImg(HTML)


这样,简单的Python图片爬取就完成了,贴上输出结果:

Python学习笔记(一)_第1张图片

以及保存到的图片:

Python学习笔记(一)_第2张图片

谢谢大家,欢迎大家继续关注我的Python学习笔记!

你可能感兴趣的:(Python学习笔记(一))