我正在学习在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示例提供帮助,因为您已经知道要使用哪个正则表达式:-)