一、正则表达式的应用举例
1
#-*-coding:utf8-*- #导入re库文件 import re f = open('text.txt','r') # text.txt文件与当前.py文件在同一路径下 html = f.read() f.close() #爬取网页标题 # 在确定只有一个内容时,使用search方法,可提高效率 title = re.search('<title>(.*?)</title>',html,re.S).group(1) print title
输出:
极客学院爬虫测试
2
#-*-coding:utf8-*- #导入re库文件 import re f = open('text.txt','r') html = f.read() f.close() #爬取链接 links = re.findall('href="(.*?)"',html,re.S) for each in links: print each
输出:
http://jikexueyuan.com/welcome.html
http://jikexueyuan.com/1.html
http://jikexueyuan.com/2.html
http://jikexueyuan.com/3.html
3
#-*-coding:utf8-*- #导入re库文件 import re f = open('text.txt','r') html = f.read() f.close() #抓取部分文字,先大再小技巧 text_fied = re.findall('<ul>(.*?)</ul>',html,re.S)[0] the_text = re.findall('">(.*?)</a>',text_fied,re.S) for every_text in the_text: print every_text
输出:
这是第一条
这是第二条
这是第三条
4
#-*-coding:utf8-*- #导入re库文件 import re old_url = 'http://www.jikexueyuan.com/course/android/?pageNum=2' total_page = 5 #sub实现翻页 for i in range(2,total_page+1): # 左闭右开 new_link = re.sub('pageNum=\d+','pageNum=%d'%i,old_url,re.S) print new_link
输出:
http://www.jikexueyuan.com/course/android/?pageNum=2
http://www.jikexueyuan.com/course/android/?pageNum=3
http://www.jikexueyuan.com/course/android/?pageNum=4
http://www.jikexueyuan.com/course/android/?pageNum=5
二、实战——制作文本爬虫
1 目标网站:
http://blog.csdn.net/column.html
2 目标内容:
图片
3 实现原理:
3.1 保存网页源代码
目前,还没有涉及到使用Python程序获取网页源代码,但是可以手动获取,因此这种文本爬虫方式又称为半自动爬虫或人肉爬虫。
1' 右击网站页面,点击“查看源代码”跳出该网页源代码(view-source:http://blog.csdn.net/column.html);
2' 对于代码量大的源程序,可回到目标网站,右击页面,点击“审查元素”,再点击弹出窗口的左上角的放大镜图标,选择目标图片,则自动定位到相应代码位置;
3' 在目标图片标签内,给出了图片网址,以及class="column_logo"信息作为寻找标记;
4' 切换到源代码页面,搜索关键字class="column_logo",可查看到该网页的所有图片对应的网址及其他信息;
5' 本着先大后小的原则,不是复制全部源代码,只需复制涉及到相关信息的源代码,以文本文件格式保存在与.py文件同一路径下;
3.2 Python读文件加载源代码
3.3 正则表达式提取图片网址
3.4 下载图片
#-*-coding:utf8-*- #导入re库文件 import re import requests # python获取网页文件的利器,这里用以保存图片 f = open('text.txt','r') html = f.read() f.close() pic_url=re.findall('src="(.*?)" class="column_logo"',html,re.S) i=0 for each in pic_url: print 'now downloading:'+each pic=requests.get(each) # 下载图片 fp=open('pic\\'+str(i)+'.jpg','wb') # 图片保存在pic文件夹下 fp.write(pic.content) fp.close() i+=1