我有一个看起来像这样的HTML页面
<tr>
<td align=left>
<a href="history/2c0b65635b3ac68a4d53b89521216d26.html">
<img src="/images/page.gif" border="0" title="полная информация о документе" width=20 height=20>
</a>
<a href="history/2c0b65635b3ac68a4d53b89521216d26_0.html" title="C.">Th</a>
</td>
</tr>
<tr align=right>
<td align=left>
<a href="marketing/3c0a65635b2bc68b5c43b88421306c37.html">
<img src="/images/page.gif" border="0" title="полная информация о документе" width=20 height=20>
</a>
<a href="marketing/3c0a65635b2bc68b5c43b88421306c37_0.html" title="b">aa</a>
</td>
</tr>
我需要获取文字
历史/ 2c0b65635b3ac68a4d53b89521216d26.html 营销/ 3c0a65635b2bc68b5c43b88421306c37.html
我在python中编写了一个使用正则表达式的脚本
import re
a = re.compile("[0-9 a-z]{0,15}/[0-9 a-f]{32}.html")
print(a.match(s))
其中s
的值是上面的html页面。但是当我使用这个脚本时,我得到"None"
。我哪里出错了?
答案 0 :(得分:3)
Don't use regex for parsing HTML content.
使用专业工具 - HTML Parser。
示例(使用BeautifulSoup
):
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
data = u"""Your HTML here"""
soup = BeautifulSoup(data)
for link in soup.select('td a[href]'):
print link['href']
打印:
history/2c0b65635b3ac68a4d53b89521216d26.html
history/2c0b65635b3ac68a4d53b89521216d26_0.html
marketing/3c0a65635b2bc68b5c43b88421306c37.html
marketing/3c0a65635b2bc68b5c43b88421306c37_0.html
或者,如果您想获得遵循模式的href
值,请使用:
import re
for link in soup.find_all('a', href=re.compile(r'\w+/\w{32}\.html')):
print link['href']
其中r'\w+/\w{32}\.html'
是一个正则表达式,应用于找到的每个href
标记的a
属性。它会匹配一个或多个字母数字字符(\w+
),后跟斜杠,后跟正好32个字母数字字符(\w{32}
),后跟一个点(\.
- 需要转义),然后是html
。
答案 1 :(得分:2)
您还可以编写类似
的内容>>> soup = BeautifulSoup(html) #html is the string containing the data to be parsed
>>> for a in soup.select('a'):
... print a['href']
...
history/2c0b65635b3ac68a4d53b89521216d26.html
history/2c0b65635b3ac68a4d53b89521216d26_0.html
marketing/3c0a65635b2bc68b5c43b88421306c37.html
marketing/3c0a65635b2bc68b5c43b88421306c37_0.html