- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
Naalayira Divya Prabandham 是一部用泰米尔语写成的 4000 节印度教诗歌集。网址http://dravidaveda.org 4000 节经文中的每一节都有一个网页。每节经文页都提供了泰米尔语经文、对这节经文的逐字泰米尔语评论和英文翻译。例如,here是第 1008 节的网页。
我的问题是,有没有什么方法可以按顺序提取所有 4000 节经文的英文翻译,这样我就可以在一个文档中获得 Naalayira Divya Prabandham 的完整英文翻译?例如,在我上面链接的网页中,我想提取“Singavel-Kundram 是纯洁的主以人狮的形式来到的地方,当世界惊叹不已时,撕裂了 Asura Hiranya 的胸膛用他的爪子。红眼睛的狮子通过在他的脚下堆积象牙来表达敬意。连同数字 1008,我想将它放在文档中的第 1008 位。
那么我该怎么做呢?我认为这可能需要某种编程,但我没有太多的技术背景,所以有人可以告诉我我需要做什么吗?请注意,文章 ID,例如 URL“dravidaveda.org/index.php?option=com_content&view=article&id=1379&ml=1”中的数字 1379,不要按节顺序排列,这样可能会有点从编程的角度来看问题。
最佳答案
您可以使用将网页内容转储到终端或控制台的软件/命令。例如 lynx
、 w3m
、 links
等(虽然也可以使用 wget
、curl
、aria2
等)。访问各个命令的手册页以获取更多信息。
这里我使用 lynx
提供示例:
#!/bin/bash
for i in {47..4568}
do
{
lynx -dump "http://dravidaveda.org/index.php?option=com_content&view=article&id=$i&ml=1" | head -n 1 >> ndp.txt
echo -e "\n" >> ndp.txt
lynx -dump "http://dravidaveda.org/index.php?option=com_content&view=article&id=$i&ml=1" | grep 'English Translation' -A 10 >> ndp.txt
echo -e "\n\n" >> ndp.txt
}
done;
此处 {47..4598}
将自动依次扩展为 47,48,....,4568。 (我发现可以从这个范围内获取 Nalayira Divya Prabandham)
1stlynx
命令将写入编号。名为 npd.txt
2ndlynx
命令将在 npd.txt
因此,在 for
循环的帮助下,根据提供的范围,您将得到 no。文件 npd.txt
中带有英语翻译的诗句。
请注意,正如您所提到的,页面 ID 不会随后出现,因此很难预测编码时要跳过的 ID。无论如何,我认为您可以轻松地从 npd.txt
中删除不需要的页面 ID 中的这些行。
但是,如果您愿意,可以使用以下验证来跳过转储这些页面:
if [[ $(lynx -dump ""http://dravidaveda.org/index.php?option=com_content&view=article&id=$i&ml=1" | head -c 1) = "(" ]]
then
[Your commands here]
fi
此处在 if
条件中给出的表达式将检查我们要转储的页面的第一个字符是否为“(”。
因此,根据网页的内容,以下命令可能会起作用:
#!/bin/bash
for i in {47..4568}
do
{
if [[ $(lynx -dump "http://dravidaveda.org/index.php?option=com_content&view=article&id=$i&ml=1" | head -c 1) = "(" ]]
then
{
lynx -dump "http://dravidaveda.org/index.php?option=com_content&view=article&id=$i&ml=1" | head -n 1 >> ndp.txt
echo -e "\n" >> ndp.txt
lynx -dump "http://dravidaveda.org/index.php?option=com_content&view=article&id=$i&ml=1" | grep 'English Translation' -A 10 >> ndp.txt
echo -e "\n\n" >> ndp.txt
}
fi
}
done;
我已经检查过,上面的脚本在我的电脑上运行良好。
更新/改进:
文件 ndp.txt
中的诗句是非连续的,因为我们从网站上获取的诗句是非连续的。所以,最后可以使用以下命令对其进行排序(感谢 @terdon 的 perl 代码):
perl -ne 'if(/^\((\d+)\)\s*$/){$d=$1;} push @{$k{$d}},$_; END{print "@{$k{$_}}\n" for sort { $a <=> $b} keys(%k)} ' npd.txt
关于html - 如何从泰米尔语网站的不同网页中按顺序提取英文文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43972937/
我是一名优秀的程序员,十分优秀!