我正在尝试从网页中获取表格的内容。我只需要内容,但不需要标签
<tr></tr>
。我什至不需要“tr”或“td”,只需要内容。例如:
<td> I want only this </td>
<tr> and also this </tr>
<TABLE> only texts/numbers in between tags and not the tags. </TABLE>
我还想将第一列输出像这样放在一个新的 csv 文件中 列1、信息1、信息2、信息3 库n2,信息1,信息2,信息3
我尝试使用 sed 删除模式
<tr>
<td>
但是当我获取表时还有其他标签,如 <color>
<span>
等,所以我想要的是删除所有标签;简而言之,一切都与 < and > 有关。
sed 's/<[^>]\+>//g'
将删除所有标签,但您可能需要将它们替换为空格,以便彼此相邻的标签不会运行在一起:<td>one</td><td>two</td>
变成:onetwo
。所以你可以做 sed 's/<[^>]\+>/ /g'
这样它就会输出 one two
(好吧,实际上是 one two
)。
也就是说,除非您只需要原始文本,并且听起来您正在尝试在剥离标签后对数据进行一些转换,否则像 Perl 这样的脚本语言可能是更适合执行此操作的工具。
由于 mu 太短,提到抓取 HTML 可能有点冒险,使用真正为您解析 HTML 的东西将是最好的方法。 PHP 的 DOM API 对于这类事情来说非常好。
Mac 终端 REGEX 的行为有点不同。我可以使用以下示例在我的 Mac 上执行此操作:
$ curl google.com | sed 's/<[^>]*>//g'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 219 100 219 0 0 385 0 --:--:-- --:--:-- --:--:-- 385
301 Moved
301 Moved
The document has moved
here.
$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, Inc.
为了澄清起见,原始内容如下:
$ curl googl.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
还可以使用 -s 选项消除烦人的卷曲标头:
$ curl -s google.com | sed 's/<[^>]*>//g'
301 Moved
301 Moved
The document has moved
here.
$
这将删除指定的标签:
#!/usr/bin/python3
# based on: https://unix.stackexchange.com/a/606006/37153
import sys
from bs4 import BeautifulSoup
if len(sys.argv) != 3:
print("2 args required: HTML/XML file, tag name")
sys.exit(1)
with open(sys.argv[1]) as fp:
soup = BeautifulSoup(fp, features="lxml")
for s in soup(sys.argv[2]): # 🎩https://gist.github.com/leonardreidy/40381da2588126928058
s.extract()
print(soup)