当前位置: 首页 > 面试题库 >

python中的regex模式,用于解析HTML标题标签

全兴运
2023-03-14
问题内容

我正在学习在python中同时使用该re模块和该urllib模块,并尝试编写一个简单的网络抓取工具。这是我编写的仅刮擦网站标题的代码

#!/usr/bin/python

import urllib
import re

urls=["http://google.com","https://facebook.com","http://reddit.com"]

i=0

these_regex="<title>(.+?)</title>"
pattern=re.compile(these_regex)

while(i<len(urls)):
        htmlfile=urllib.urlopen(urls[i])
        htmltext=htmlfile.read()
        titles=re.findall(pattern,htmltext)
        print titles
        i+=1

这样可以为Google和Reddit提供正确的输出,但不能为Facebook提供正确的输出-像这样:

['Google']
[]
['reddit: the front page of the internet']

这是因为,我发现在Facebook页面上的title标签如下:<title id="pageTitle">。为了适应额外的需求id=,我对these_regex变量进行了如下修改:these_regex="<title.+?>(.+?)</title>"。但这给出了以下输出:

[]
['Welcome to Facebook \xe2\x80\x94 Log in, sign up or learn more']
[]

如何将两者结合起来,以便考虑title标记中传递的任何其他参数?


问题答案:

您正在使用正则表达式,并且将与此类表达式匹配的HTML变得太复杂,太快。

取而代之的是使用HTML解析器,Python有多种选择。我建议您使用BeautifulSoup,这是一个受欢迎的3rd
party库。

BeautifulSoup示例:

from bs4 import BeautifulSoup

response = urllib2.urlopen(url)
soup = BeautifulSoup(response.read(), from_encoding=response.info().getparam('charset'))
title = soup.find('title').text

由于title标签本身不包含其他标签,因此可以在此处使用正则表达式,但是一旦尝试解析嵌套标签, 就会 遇到非常复杂的问题。

您可以通过匹配title标记中的其他字符来解决您的特定问题,可以选择:

r'<title[^>]*>([^<]+)</title>'

匹配0个或多个 不是>括号的字符。此处的“ 0或更多”可让您同时匹配额外的属性和纯<title>标签。



 类似资料:
  • 问题内容: 我正在尝试从Javascript的字符串中删除所有html标记。这是我所拥有的…我不知道为什么它不起作用....有人知道我在做什么错吗? 非常感谢! 问题答案: 尝试此操作,注意HTML语法太复杂,以至于正则表达式在100%的时间内都是正确的: 如果您愿意使用jQuery之类的库,则可以执行以下操作:

  • 嗨,我有一个html文件解析的场景。我正在使用jsoup解析html文件,解析后我想提取头标记(h1、h3、h4)。我用过医生。select()但它将只返回标题标记值,但我的要求是我应该提取h1到h3或h4之间的标记,反之亦然。 所以这里首先搜索html字符串是否包含任何H1,H3,H4。这里我们有h4,所以包括h4,它应该搜索下一个h1或h3,直到h3我们提取字符串并把它放在一个单独的html文

  • 问题内容: python内置了许多html和xml库,很难相信不支持实际的HTML解析。 我已经找到了很多很棒的第三方库来执行此任务,但是这个问题与python标准库有关。 要求: 仅使用Python标准库组件(任何2.x版本) DOM支持 处理HTML实体() 手柄部分文件(如:) 奖励积分: XPATH支持 处理未封闭/格式错误的标签。( 这是我要求的90%解决方案。这适用于我尝试过的有限的H

  • 问题内容: 因为正则表达式使我感到恐惧,所以我试图找到一种方法来删除所有HTML标记并从Python中的字符串解析HTML实体。 问题答案: 使用lxml是最适合python的xml / html库。 如果您只想清理html,请查看lxml.html.clean模块

  • 我实际上正在用Java开发一个文本解析器,有人要求我通过用它解析HTML来增强它。解析器的目的是将被解析的文件分成另外三个文件,一个包含文件中包含的所有单词,一个包括所有句子,另一个包含所有问题。 *.txt部分工作得很好,但我在解析HTML时遇到了一个问题。 我创建了一个扩展名为*.txt的临时文件,并将其在我的文本解析器中传递,但是如果我传递一个带有HTML文件链接的URL,其格式如下所示:

  • 问题内容: 我想获取HTML中隐藏的输入字段的值。 我想用Python编写一个正则表达式,该表达式将返回的值,因为我知道HTML中的行遵循以下格式 有人可以提供Python范例来解析HTML值吗? 问题答案: 对于这种特殊情况,BeautifulSoup比正则表达式更难编写,但是它更健壮…我只是为BeautifulSoup示例提供帮助,因为您已经知道要使用哪个正则表达式:-)