PHP:我想创建一个从论坛帖子中提取图像的页面,可行吗?笨?

时间:2008-12-28 15:56:36

标签: php

你有一个论坛(vbulletin)有一堆图像 - 有一个页面访问一个线程,逐步浏览每个页面并转发给用户(通过ajax或其他)图像是多么容易。我不是在问过滤(当然这很容易)。

一天可行吗? :)

我有一个使用codeigniter的网站 - 使用它会更简单吗?

4 个答案:

答案 0 :(得分:2)

假设这是在服务器上执行的,curl + regexp是你的朋友..并且是的...在一天之内可行......

还有一些open-source HTML parsers可能会使这个更清洁

答案 1 :(得分:0)

这取决于您的抓取脚本的运行位置。

如果它与论坛软件在同一台服务器上运行,您可能需要直接访问数据库并检查其中的图像链接。我不熟悉vbulletin,但可能它提供了一个允许高级数据库访问的插件api。这样可以简化查询帖子中的所有帖子。

但是,如果您的脚本在不同的计算机上运行(或者换句话说,与论坛软件无关),则必须充当http客户端。它可以获取线程的所有页面(通过在页面中搜索NEXT链接自动获取,或者通过将所有页面指定为参数手动获取)并在html源代码中搜索图像标记(<img .../>)。 然后可以使用正则表达式来提取图像URL。最后,脚本可以使用这些图像URL构建显示所有这些图像的另一个页面,或者可以下载它们并创建一个包。

在第二种情况下,脚本实际上充当“蜘蛛”,因此它应该尊重robots.txt或meta标签之类的内容。

答案 2 :(得分:0)

执行此操作时,请务必对提取进行限速。您不希望通过每秒请求多个页面来使论坛服务器超载。最简单的方法是在每次获取之间休息X秒。

答案 3 :(得分:0)

一天是可行的

由于您已经使用了CI设置,我会使用它。

我会使用以下方法:

1)在CI中建立一个能够:

的模型
  • 登录vbulletin(图像通常作为附件添加,您需要先登录才能下载)。使用snoopy之类的内容。
  • 使用preg_match()收集“最后一个按钮”的url,使用parse_url()/和parse_str()解析url并生成从第1页到最后一页的链接
  • 从所有生成的链接中收集html。仍在使用史努比。
  • 使用preg_match_all()
  • 在html中查找所有图像
  • 下载所有图片。仍在使用史努比。
  • 将下载的图像从tmp目录移动到另一个目录,如果同一图像名已经存在,则将其重命名为imagename_01,imagename_02等。
  • 在db表中保存图像名称和精确字节大小。然后,您可以避免多次下载同一图像。

2)在控制器中创建一个收集所有图像的方法

3)设置一个定期收集图像的cronjob。 wget -o /tmp/useless.html http://localhost/imageminer/collect应该做得很好

4)使用db表编写为最终用户输出漂亮html的代码以获取图像。