Problem: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-)

Solution: Piture Spider, Python:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Date : 2015-03-22 15:29:31
# @Author : NSSimacer
# @Version : 1.0
import urllib2
import os
from bs4 import BeautifulSoup
def picture_spider(url):
'''
从网页爬取图片
'''
headers = { # 封装headers,伪装成浏览器进行抓取,防止因网站禁止爬虫封 IP
'User-Agent': 'Mozilla/5.0 \
(Windows NT 6.1; WOW64) \
AppleWebKit/537.36 \
(KHTML, like Gecko) \
Chrome/41.0.2272.89 Safari/537.36'
}
request = urllib2.Request(url, headers=headers)
content = urllib2.urlopen(request).read()
bs = BeautifulSoup(content)
img_soup = bs.find_all(name='img',
attrs={'class': 'BDE_Image'})
print 'Fetching … '
for count, item in enumerate(img_soup):
img_request = urllib2.Request(item['src']) # 下载图片请求
img = urllib2.urlopen(img_request).read()
img_name = item['src'].split('/')[-1]
with open('Picture Spider' + os.sep + img_name, 'wb') as f:
f.write(img)
print 'Fetching', count + 1, img_name
print 'Done!'
if __name__ == '__main__':
url = 'http://tieba.baidu.com/p/2166231880'
picture_spider(url)

主要目的是熟悉编写 Python 爬虫的大致流程 —— 打开 url urllib2.urlopen(self, args),读取页面内容 read(self, args),匹配所需内容,对于结构简单的页面元素,可以用 BeautifulSoup 直接提取 bs.find_all(self, args) ,稍微复杂的可以正则表达式去匹配,或者两者结合起来使用。

题目来源:Python 练习册,每天一个小程序 THX!