如何从泰米尔语网站的不同网页上顺序提取英文文本?

时间:2017-05-15 06:39:25

标签: html parsing url html-parsing html-parser

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&按顺序按顺序排列,因此从编程的角度来看可能会造成一些问题。

1 个答案:

答案 0 :(得分:1)

您可以使用将网页内容转储到终端或控制台的软件/命令。例如lynxw3mlinks等(虽然也可以使用wgetcurlaria2等。访问相应命令的手册页以获取更多信息。

这里我使用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

的文件中,例如(1008)

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