实验室任务详细:写一个python脚本,脚本后面跟上一个url的网址页面。
要求:正则匹配爬虫的方式,匹配该url网页中的html的href标签中的url,显示这些url,一行一个。

首先明确什么是 href:
定义和用法

<a> 标签的 href 属性用于指定超链接目标的 URL。
href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符。如果用户选择了 <a> 标签中的内容,那么浏览器会尝试检索并显示 href 属性指定的 URL 所表示的文档
提示和注释
注意:<a> 标签中必须提供 href 属性或 name 属性。

语法

<a href="value">
属性值
值 描述
URL 超链接的 URL。可能的值:绝对 URL - 指向另一个站点(比如 href="http://www.example.com/index.htm")相对 URL - 指向站点内的某个文件(href="index.htm")锚 URL - 指向页面中的锚(href="#top")

获取超链接之间内容

通常在使用正则表达式时,需要分析网页链接,获取URL或网页内容。核心代码如下:
        res = r'<a .*?>(.*?)</a>'
        urls=re.findall(r"<a.*?href=.*?<\/a>", content, re.I|re.S|re.M)
        re.I 忽略大小写

re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M 多行模式
re.S 即为 . 并且包括换行符在内的任意字符
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和 # 后面的注释

例子:

# coding=utf-8
import re
 
content = '''
<td>
<a href="https://www.baidu.com/articles/zj.html" title="浙江省">浙江省主题介绍</a>
<a href="https://www.baidu.com//articles/gz.html" title="贵州省">贵州省主题介绍</a>
</td>
'''
 
#获取<a href></a>之间的内容
print u'获取链接文本内容:'
res = r'<a .*?>(.*?)</a>'
mm =  re.findall(res, content, re.S|re.M)
for value in mm:
    print value
 
#获取所有<a href></a>链接所有内容
print u'\n获取完整链接内容:'
urls=re.findall(r"<a.*?href=.*?<\/a>", content, re.I|re.S|re.M)
for i in urls:
    print i
 
#获取<a href></a>中的URL
print u'\n获取链接中URL:'
res_url = r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')"
link = re.findall(res_url ,  content, re.I|re.S|re.M)
for url in link:
    print url

输出如下图所示:

>>> 
获取链接文本内容:
浙江省主题介绍
贵州省主题介绍
 
获取完整链接内容:
<a href="https://www.baidu.com/articles/zj.html" title="浙江省">浙江省主题介绍</a>
<a href="https://www.baidu.com//articles/gz.html" title="贵州省">贵州省主题介绍</a>
 
获取链接中URL:
https://www.baidu.com/articles/zj.html
https://www.baidu.com//articles/gz.html
>>>

python正则表达式(菜鸟教程)
http://www.runoob.com/python/python-reg-expressions.html

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。
re 模块使 Python 语言拥有全部的正则表达式功能。

最终成果:

# coding=utf-8
import re
#导入正则模块
import urllib
#导入URL模块
url = "http://www.baidu.com/"
#可变更URL
content = urllib.urlopen(url).read()
#打开,并读入链接内容

print u'\n获取链接中URL:'
# 获取<a href></a>中的URL
res_url = r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')"
#正则匹配URL
links = re.findall(res_url, content, re.I | re.S | re.M)
#用数组盛放爬取的链接,findall函数返回的总是正则表达式在字符串中所有匹配结果的列表
#re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法)
#re.M(re.MULTILINE): 多行模式,改变'^'和'$'的行为
#re.S(re.DOTALL): 点任意匹配模式,改变'.'的行为

for url in links:
    print url
#打印links数组中的每一个URL