摘要
我正在使用PHP新闻爬虫项目,并希望使用wget(版本1.12)从近百个新闻网站中提取RSS新闻源,以捕获整个RSS源文件,所有这些都在本地服务器的一个目录(无层次结构)中关于:
HTML
,但在开始时我只能专注于XML提要。source.category.type.xml
(每个XML远程网址都有自己的来源,类别和类型,但没有我的命名约定),在保存前需要重命名源文件 <pubDate>
一样的新闻时间戳,因此我必须选择一种良好的工作方法来处理新闻时间,即使只是略有差异但又强大,有效,永远有效。 url-list.txt
包括:
http://source1/path/to/rss1
http://source2/diiferent/path/to/rss2
http://source3/path/to/rss3
.
.
.
http://source100/different/path/to/rss100
我想要这个:
localfeed/source1.category.type.xml
localfeed/source2.category.type.xml
localfeed/source3.category.type.xml
.
.
.
localfeed/source100.category.type.xml
类别和类型可以有多个预定义值,例如sport
,...
我有什么?
在第一级,我应该使用远程网址列表执行wget
:根据this wget instructions:
url-list.txt
应包含一系列网址,每行一个wget
,-N
,-nc
或-r
的情况下运行-p
时,在同一目录中下载相同的文件将导致原始副本保留FILE
,第二个副本名为FILE.1
。-O
这样的wget -O FILE
它将整个下载输出到一个文件中。-N
进行时间戳-w SECONDS
将在下次检索前的SECONDS
秒内保持-nd
强制wget
在递归检索时不要创建目录层次结构。启用此选项后,所有文件都将保存到当前目录,而不会破坏(如果名称显示多次,则文件名将获得扩展名。.n&#39;)-nH
禁用主机前缀目录的生成(默认情况下-r
的行为)。-P PREFIX
将目录前缀设置为PREFIX。 &#34;目录前缀&#34;是保存所有其他文件和子目录的目录,即检索树的顶部。 -k
转换用于离线浏览的链接
$ wget -nH -N -i url-list.txt
<小时/> 使用(wget&amp; cron job和php)问题:
如何处理新闻时间?最好是在source.category.type.timestamp.xml
等文件名中保存时间戳,或使用php
stat
函数获取更改时间,如下所示:
$stat = stat('source.category.type.xml');
$time = $stat('mtime'); //last modification time
或任何其他想法(总是有效且稳健)
如何处理文件名?我想在不同的约定(source.category.type.xml
)上本地保存文件,所以我认为像wget options
或--trust-server-names
--content-disposition
无法帮助。我想我应该像这样进行一次循环:
while read url; do
wget -nH -N -O nameConvention $url
done < utl-list.txt
答案 0 :(得分:0)
我建议远离wget完成你的任务,因为它让你的生活无缘无故地复杂化。 PHP可以很好地获取下载。
我会将所有网址添加到数据库中(它可能只是一个文本文件,就像你的情况一样)。然后我会使用cronjob来触发脚本。
在每次运行中,我会检查固定数量的站点并将其RSS源放入该文件夹中。例如。 file_get_contents
和file_put_contents
你很高兴。这使您可以完全控制要获取的内容以及如何保存它。
我会使用另一个遍历文件的脚本并进行解析。将脚本从开头分离将有助于您稍后进行扩展。
对于一个简单的站点,只需按mtime
对文件进行排序即可。对于大规模的扩展,我会使用一个职业队伍。
PHP的开销很小,而使用wget的额外复杂性是一个很大的负担。