Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash脚本从html中提取信息_Html_Bash_Url_Extract_Spreadsheet - Fatal编程技术网

使用bash脚本从html中提取信息

使用bash脚本从html中提取信息,html,bash,url,extract,spreadsheet,Html,Bash,Url,Extract,Spreadsheet,我是一个新手程序员,目前正在玩弄java。我有一个想法,一个朋友告诉我最好用bash执行一个程序,但我没有时间学习另一种编程语言。基本上,我希望它请求一个url,然后转到该url并在我指定的标记之间提取信息(当然,使用正则表达式),然后将该信息放入excel电子表格中。使用curl url>out.txt,然后使用grep regex out.txt(其中包含正则表达式的行)。正如上面的评论所说,您可能需要使用一种真正的编程语言,这取决于您想要提取的内容,因为bash非常不可靠。使用curl u

我是一个新手程序员,目前正在玩弄java。我有一个想法,一个朋友告诉我最好用bash执行一个程序,但我没有时间学习另一种编程语言。基本上,我希望它请求一个url,然后转到该url并在我指定的标记之间提取信息(当然,使用正则表达式),然后将该信息放入excel电子表格中。

使用curl url>out.txt,然后使用grep regex out.txt(其中包含正则表达式的行)。正如上面的评论所说,您可能需要使用一种真正的编程语言,这取决于您想要提取的内容,因为bash非常不可靠。

使用curl url>out.txt,然后使用grep regex out.txt(它获取包含regex的行)。正如上面的评论所说,您可能需要使用真正的编程语言,这取决于您想要提取的内容,因为bash非常不可靠。

虽然我同意在bash中解析html通常是个坏主意,但如果这是一次性的,那么可能值得一试

例如,它从给定的URL获取标题标记:

wget --no-check-certificate --quiet -O - http://someurl.com \
| paste -sd ' ' - \
| grep -o -e '<head[^>]*>.*</head>' \
| grep -o -e '<title>.*</title>' \
| cut -d '>' -f 2 \
| cut -d '<' -f 1 \
| tr -d '   ' \
| sed 's| *\(.*\)|\1|g' \
| paste -s -d '\n' - 
wget——无检查证书——安静-O-http://someurl.com \
|粘贴-sd“”-\
|grep-o-e']*>.'\
|grep-o-e'.*'\
|切割-d'>'-f2\

|cut-d'虽然我同意在bash中解析html通常是一个坏主意,但如果这是一个一次性的,那么它可能是值得的

例如,它从给定的URL获取标题标记:

wget --no-check-certificate --quiet -O - http://someurl.com \
| paste -sd ' ' - \
| grep -o -e '<head[^>]*>.*</head>' \
| grep -o -e '<title>.*</title>' \
| cut -d '>' -f 2 \
| cut -d '<' -f 1 \
| tr -d '   ' \
| sed 's| *\(.*\)|\1|g' \
| paste -s -d '\n' - 
wget——无检查证书——安静-O-http://someurl.com \
|粘贴-sd“”-\
|grep-o-e']*>.'\
|grep-o-e'.*'\
|切割-d'>'-f2\

|cut-d'如果在Mac上,您应该查看xmllint;xmlstarlet for Unix风格。我以前在类似的shell脚本中使用过这两种脚本,它做得很好

比如说

wget target_url -q -O - > test.html
xmlstarlet sel -t -c "!doctype/html/collection/item[property=1234]" test.html
可能会产生类似于

<item>
  <foo>hello</foo>
  <baz>world</baz>
  <property>1234</property>
</item>

你好
世界
1234
您必须了解您的文档树,才能深入到您正在搜索的“集合/项目”标签,这只是一个示例


如果您想在html抓取方面获得真正的能力,请使用BeatifulSoup检查Python,但在这种情况下,这会有点过分了

您应该在Mac上查看xmllint;xmlstarlet for Unix风格。我以前在类似的shell脚本中使用过这两种脚本,它做得很好

比如说

wget target_url -q -O - > test.html
xmlstarlet sel -t -c "!doctype/html/collection/item[property=1234]" test.html
可能会产生类似于

<item>
  <foo>hello</foo>
  <baz>world</baz>
  <property>1234</property>
</item>

你好
世界
1234
您必须了解您的文档树,才能深入到您正在搜索的“集合/项目”标签,这只是一个示例


如果您想在html抓取方面获得真正的优势,请使用BeatifulSoup检查Python,但在这种情况下,这将是一种过火的行为

使用bash脚本解析html是一个经典的“不要这样做”的示例-这是不可靠的,您必须考虑用html表达某些内容的多种方式(以及可以更改文档的框架和脚本呢?)。如果你真的想这样做,那就发布更多的细节,比如你要找的标签。你不想用正则表达式解析xml。如果大部分逻辑都基于正则表达式,那么正则表达式很快就会成为噩梦。使用库解析xml更好。也就是说,如果您只有一个非常特定的请求,那么编写脚本可能会很有趣。使用bash脚本解析HTML是一个经典的“不要做”示例—它不可靠,您必须考虑用HTML表达某些内容的多种方式(以及可以更改文档的框架和脚本呢?)。如果你真的想这样做,那就发布更多的细节,比如你要找的标签。你不想用正则表达式解析xml。如果大部分逻辑都基于正则表达式,那么正则表达式很快就会成为噩梦。使用库解析xml更好。也就是说,如果您只有一个非常具体的请求,那么编写脚本可能会很有趣。