一直觉得爬虫是个很有意思的东西,初学爬虫走了些弯路。个人觉得看视频进度太慢了,还是推荐直接看 python document 以及大部分问题在 stackoverflow 上都找得到。
本文使用的库是 urllib
与 BeautifulSoup4
值得注意的是,python 3 以后的版本中,urllib2
已经并入到 urllib.request
与 urllib.error
中,详见https://docs.python.org/2/library/urllib2.html。BeautifulSoup4
的安装方法是 pip install beautifulsoup4
本文爬虫功能:爬取图片
首先要获取我们的目标网站信息,使用 urlopen
打开,用 read()
读取1
2
3url = 'http://yooooh.net/'
html = urllib.request.urlopen(url).read()
其次要把对象解析为 html 或者 xml,注意这里第二个参数是 html.parser
,如果解析为 xml,传入参数是 lxml-xml
或 xml
,详见Beautiful Soup Documentation1
soup = BeautifulSoup(html, "html.parser")
下面是关键部分,如何在 soup
对象里识别 img
标签。如果要存储为数组,那么用下面的小 trick 就行。1
2
3
4soup_img = soup.find_all('img')
# store as array for convenience in for-loop
images = [img for img in soup.find_all('img')]
我们要从中提取图片超链接。观察网站源码(以本此博客为例),格式为<img src="http://i.imgur.com/VzYMnK3.png" alt="">
,故可用 element.get('src')
来获取图片超链接。1
image_links = [each.get('src') for each in images]
接下来就是扫尾部分:通过超链接下载图片并存储到本地路径。根据用户需求,可以分为下载到指定路径和下载到代码文件所在文件夹,而且通常是新建一个 Images 文件来存储图片,方便管理。
下载到指定目录。注意这里使用了双斜杠,其实是转义为单斜杠
1
2
3imgPath = 'C:\\Images\\'
urllib.request.urlretrieve(each, imgPath+filename)下载到代码文件所在文件夹
1
2
3
4
5
6
7import os
folderName = 'Images'
if not os.path.exists(folderName):
os.makedirs(folderName)
urllib.request.urlretrieve(each, os.path.join(folderName, filename))
下面给出例子的完整源码:DLImages.py
作为参考,还给出了如何批量下载 qq 头像的代码:QQAvatar.py
结果发现大部分 qq 都是初始头像(估计是一大波僵尸号)。