Python爬虫从0开始学(1)

在写Python爬虫的文章超过30篇了(《Python爬虫文章专辑》),上周加了不少想学习Python爬虫的朋友,居然有两位简友说,是看我的文章学会Python的,还有一位朋友说,一晚上一直在看我写的Scrapy文章(有15篇文章)。
一直都有一些完合零基础的童鞋加我,想学习Python。我就想整理一个Python从0开始学的系列文章,有一段时间还想把这个专题取名为“适合女孩子学的Python教程”(Python Girls),就是要进一步降低学习的门槛,做到有趣,实用,能快速应用。
今天的文章其实不是完全从0开始,是适合了解一些编程语言,或者在大学学会C语言课程。Python语言的学习方法和环境搭建准备,我会另写一篇。
如果你使用的是Mac或Linux系统,是自带Python环境的。
今天先从一个小爬虫,一段小代码开始,实现批量下载图片的功能。把贴吧这个页面上的图片都下载下来。
http://tieba.baidu.com/p/3205263090

一、实现的流程 只有3步:
1)拿到网页的源码
2)匹配出网页中图片的url
3)把图片保存到本地(电脑中)
二、实现过程解析 1)我们可以通过在网页上点击右键,“查看页面源代码”,来看一个网页的背后是由这些代码组成的。
Python爬虫从0开始学(1)
文章图片
这太复杂了 是的,这太复杂了,我们也不必去读它。第一步,就是要在程序中拿到它。在Python中很简单,只要3行代码就可以实现:
import urllib page = urllib.urlopen('http://tieba.baidu.com/p/3205263090') html = page.read() print html

在终端上运行一下,就是这样,拿到网页的源码:

Python爬虫从0开始学(1)
文章图片
第一行代码,是导入urllib模块,urllib是Python用于网络访问的基础模块。urlopen()方法就是打开一个url,返回一个文件对象,然后就可以进行类似文件对象的操作。
2)要找出文章中的图片地址进行正则表达式的匹配。这是刚开始学习的难点。
可以理解成,网页中每个图片的地址(url)不一样,要找出他们的规律。
【Python爬虫从0开始学(1)】在页面上的图片右键“查看元素”,找到这个图片对应的代码:
Python爬虫从0开始学(1)
文章图片
右键查看元素 红色框中对应的 scr= 后面的就是我们要得到的内容。
reg = r'src="https://www.it610.com/article/([.*/S]*/.jpg)" pic_ext="jpeg"'

这行代码不太理解的话,先拷过来。可以理解成为这个就是能对得上上面红色框中src="https://www.it610.com/article/xxxxoooo" pic_ext="jpeg"的模子。
这样看来,正则表达式是一个学习的重点。
3)注意我们找到的要下载的图片是多个,用循环迭代出来,一个个保存到我们的电脑就可以了
#生成一个我们所需要的Pattern(正则表达式)实例 imagereg = re.compile(reg)#以列表形式返回全部能匹配的子串。 imgurls = re.findall(imagereg, html)x = 1 for imgurl in imgurls: urllib.urlretrieve(imgurl, '/Users/apple/Desktop/a/%s.jpg' % x) x +=1

urlretrieve()方法上将url定位到的html文件下载到你本地的硬盘中。第一个参数是要下载的url,第二个参数是保存的路径+文件名。注意你写的时候要改成你电脑上的路径。
完整的代码:
#coding=utf-8 import re import urllib# 获取网页源代码的方法 def getHtml(url): page = urllib.urlopen(url) html = page.read() return htmlhtml =getHtml('http://tieba.baidu.com/p/3205263090')reg = r'src="https://www.it610.com/article/([.*/S]*/.jpg)" pic_ext="jpeg"'#正则表达式的字符串形式,编译为Pattern实例 imagereg = re.compile(reg)#搜索string,以列表形式返回全部能匹配的子串 imgurls = re.findall(imagereg, html)x = 1 for imgurl in imgurls: urllib.urlretrieve(imgurl, '/Users/apple/Desktop/a/%s.jpg' % x) x +=1

看一下运行的结果。
Python爬虫从0开始学(1)
文章图片
总结一下:
  1. Python对网络访问的模块封装得很好,代码少。
  • 需要对网页了解一些,正则表达式在这里是关键,我们后面还有简单的方法。
  • 学习一个东西从兴趣开始,先做个小东西出来,这样学起来比较快。

    推荐阅读