title = str(Soup.find('td', {'id': 'bxgy_x_img'}))
title_re = re.compile('alt="(.*)"')
title_pat = re.findall(title_re, title)
出于某种原因,这不只是抓住Title,我如何让它抓住Title?
正在运行的HTML如下:
<td id="bxgy_x_img">
<alt="Title" id="bxgy_img_a" height="75" border="0" />
</td>
答案 0 :(得分:2)
问题在于*
是贪婪的,这意味着它会在border="0"
之后一直匹配'''。尝试使用[A-Za-z0-9]+
将模式限制为字母和数字
答案 1 :(得分:1)
我认为你真正想要的更像是:
title_re = re.compile('alt="([^"]*)"')
其中[^"]
表示“除双引号字符外的任何内容”。它并不严格符合HTML有效字符,我不认为(具体是新行),但它应该适用于您的目的。此外,您还需要解析HTML实体 - 例如"
- 如果您想捕获实际预期值。
答案 2 :(得分:0)
试试这个:
title_re = re.compile('alt="(?P<title>[A-z]*)"')
答案 3 :(得分:0)
HTML似乎已被破坏。当BeautifulSoup解析content
时,它只会将<alt="Title" id="bxgy_img_a" height="75" border="0" />
解释为空<alt></alt>
标记:
import BeautifulSoup
content = '''\
<td id="bxgy_x_img">
<alt="Title" id="bxgy_img_a" height="75" border="0" />
</td>
'''
soup = BeautifulSoup.BeautifulSoup(content)
title = str(soup.find('td', {'id': 'bxgy_x_img'}))
print(title)
# <td id="bxgy_x_img">
# <alt>
# </alt></td>