Naalayira Divya Prabandham是一部用泰米尔语写成的4000首诗集。网站http://dravidaveda.org有一个网页,分别为4000节经文。每节经文都给出了泰米尔语诗歌,这节经文的逐字逐句泰米尔语和英语翻译。例如,here是第1008节的网页。
我的问题是,有什么办法可以按顺序提取所有4000节经文的英文译本,所以我可以在一份文件中完整地翻译Naalayira Divya Prabandham吗?例如,在我上面链接的网页中,我想提取" Singavel-Kundram是纯粹的主作为一个人类来到这里的地方,而世界却惊呆了,而且撕裂了Asura Hiranya的胸部有着他的爪子。红眼狮子通过在他的脚上堆满象牙而敬畏来提供崇拜。"以及数字1008,我想将它放在我的文档中的第1008位。
那我该怎么做呢?我认为这可能需要某种编程,但我没有太多的技术背景,所以有人能告诉我我需要做什么吗?请注意文章ID,例如网址#34; dravidaveda.org/index.php?选项= com_content& view = article& id = 1379& ml = 1",don&按顺序按顺序排列,因此从编程的角度来看可能会造成一些问题。
答案 0 :(得分:1)
您可以使用将网页内容转储到终端或控制台的软件/命令。例如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可以从这个范围内获取)
1 st lynx
命令将写入否。例如,在名为npd.txt
2 nd lynx
命令将为npd.txt
因此,在for
循环的帮助下,根据提供的范围,你将得到否定。文件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 for perl code):
perl -ne 'if(/^\((\d+)\)\s*$/){$d=$1;} push @{$k{$d}},$_; END{print "@{$k{$_}}\n" for sort { $a <=> $b} keys(%k)} ' npd.txt