文章目录

昨天讲了爬虫入门的基础知识已经基本够用了,今天我们来写一个小爬虫实战一下,练练手。在这里说一下,访问的网站如果禁止爬虫抓取的话,那么我们就要加上头文件,来模拟浏览器抓取网页信息,但是有的网站并不禁止爬虫抓取,那么我们便可加可不加,加的话势必会影响爬虫抓取的速度,这里大家可以自由选择啦。

我初步的设想是抓抓学校老师们的靓照,给大家欣赏一下(奸笑),首先我们必须先访问一下学校的网站,看看教师简介在哪里,偷偷地复制一下网址,再看看源码,便可以着手写爬虫了,此处省取若干字……大家自行脑补,我还是直接上代码吧,Talk Is Cheap, Show Me The Code!

代码如下:

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
#--*--coding:utf-8--*--
import re #导入re库,正则表达式库
import urllib.request
from urllib.error import URLError,HTTPError
import sys
url = "http://www.hainu.edu.cn/stm/xinxi/shtml_liebiao.asp@bbsid=5419.shtml"
# 给文件加入头信息,用以模拟浏览器访问
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {
'Connection': 'Keep-Alive',
'Accept': 'text/html, application/xhtml+xml, */*',
'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
}
j=1 #第j张照片,后面用到
for i in range(5419,5426):
try: #try是一种处理异常的语句
#实现翻页翻页
url1 = re.sub('bbsid=\d+','bbsid=%d'%i,url,re.S) #sub实现替换功能
print(url1)
#发送请求,获得返回信息
req1 = urllib.request.Request(url1,headers=headers) #模拟浏览器请求访问url1
response = urllib.request.urlopen(req1,timeout=15) #返回一个 http.client.HTTPResponse 对象,允许延迟15秒
content1 = response.read().decode('gbk') #以'gbk'的编码格式读取
#处理获取的web网页,并将信息处理了
items1 = re.findall('<a target="_blank" href="(.*?)">',content1,re.S) #进行正则匹配
for url2 in items1:
url2 = 'http://www.hainu.edu.cn' + url2
req2 = urllib.request.Request(url2,headers=headers)
response = urllib.request.urlopen(req2,timeout=15)
content2 = response.read().decode('gbk')
picurl = re.findall('<a target="_blank" title="在新窗口打开" href=(.*?)>',content2,re.S)
if len(picurl) > 0 :
picurl0 = 'http://www.hainu.edu.cn' + picurl[0]
pic = urllib.request.urlopen(picurl0)
jpgpic = pic.read()
#首先你得有个pic文件夹
fp = open('pic/'+str(j)+'.jpg',"wb") #以二进制写
print('正在捕获第%d位老师'%j)
# 写入文件
fp.write(jpgpic)
fp.close()
j=j+1
except HTTPError as e: # except为异常类型,e为异常处理代码段
print("HTTPError")
except URLError as e:
print("URLError")

文章出自:Krzer http://www.krzer.com/版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。

文章目录