在简书写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中很简单,只要3行代码就可以实现:
import urllib
page = urllib.urlopen('http://tieba.baidu.com/p/3205263090')
html = page.read()
print html
在终端上运行一下,就是这样,拿到网页的源码:
第一行代码,是导入urllib模块,urllib是Python用于网络访问的基础模块。urlopen()
方法就是打开一个url,返回一个文件对象,然后就可以进行类似文件对象的操作。
2)要找出文章中的图片地址进行正则表达式的匹配。这是刚开始学习的难点。
可以理解成,网页中每个图片的地址(url)不一样,要找出他们的规律。
在页面上的图片右键“查看元素”,找到这个图片对应的代码:
红色框中对应的 scr=
后面的就是我们要得到的内容。
reg = r'src="([.*\S]*\.jpg)" pic_ext="jpeg"'
这行代码不太理解的话,先拷过来。可以理解成为这个就是能对得上上面红色框中src="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 html
html = getHtml('http://tieba.baidu.com/p/3205263090')
reg = r'src="([.*\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对网络访问的模块封装得很好,代码少。
- 需要对网页了解一些,正则表达式在这里是关键,我们后面还有简单的方法。
- 学习一个东西从兴趣开始,先做个小东西出来,这样学起来比较快。