正则表达式(续)

一、正则表达式的应用举例

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

正则表达式(续)_第1张图片

2 目标内容:

图片

3 实现原理:

3.1 保存网页源代码

目前,还没有涉及到使用Python程序获取网页源代码,但是可以手动获取,因此这种文本爬虫方式又称为半自动爬虫人肉爬虫

1' 右击网站页面,点击“查看源代码”跳出该网页源代码(view-source:http://blog.csdn.net/column.html);

2' 对于代码量大的源程序,可回到目标网站,右击页面,点击“审查元素”,再点击弹出窗口的左上角的放大镜图标,选择目标图片,则自动定位到相应代码位置;

3' 在目标图片标签内,给出了图片网址,以及class="column_logo"信息作为寻找标记;


4' 切换到源代码页面,搜索关键字class="column_logo",可查看到该网页的所有图片对应的网址及其他信息;

正则表达式(续)_第2张图片

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












你可能感兴趣的:(正则表达式(续))