Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:我想创建一个从论坛线程中提取图像的页面,可行吗?代码点火器?_Php - Fatal编程技术网

PHP:我想创建一个从论坛线程中提取图像的页面,可行吗?代码点火器?

PHP:我想创建一个从论坛线程中提取图像的页面,可行吗?代码点火器?,php,Php,你有一个论坛(vbulletin),它有一堆图片——如果有一个页面访问一个线程,逐步浏览每个页面并将图片转发给用户(通过ajax或其他方式),那该有多容易。我不是在问过滤(这当然很容易) 一天内可以完成吗?:) 我有一个网站也使用codeigniter——使用它会更简单吗?假设这是在服务器上执行的,curl+regexp是您的朋友。。是的。。一天之内可以做到 还有一些方法可能会使该脚本更干净,这取决于您的刮片脚本运行的位置 如果它与论坛软件运行在同一台服务器上,您可能希望直接访问数据库并检查那里

你有一个论坛(vbulletin),它有一堆图片——如果有一个页面访问一个线程,逐步浏览每个页面并将图片转发给用户(通过ajax或其他方式),那该有多容易。我不是在问过滤(这当然很容易)

一天内可以完成吗?:)


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

假设这是在服务器上执行的,curl+regexp是您的朋友。。是的。。一天之内可以做到


还有一些方法可能会使该脚本更干净,这取决于您的刮片脚本运行的位置

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

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


在第二种情况下,脚本实际上起到了“蜘蛛”的作用,因此它应该尊重robots.txt或meta标记等内容。

执行此操作时,请确保限制您的抓取速率。您不希望每秒请求许多页面,从而使论坛服务器过载。最简单的方法可能是在每次抓取之间睡眠X秒。

是的,一天内可以完成

既然你已经有了一个有效的CI设置,我会使用它

我将采用以下方法:

1) 在CI中制作一个能够:

  • 登录到vbulletin(图像通常作为附件添加,需要先登录才能下载)。使用类似于
  • 使用preg_match()收集“最后一个按钮”的url,使用parse_url()/和parse_str()解析url,并生成从第1页到最后一页的链接
  • 从所有生成的链接收集html。还在用史努比
  • 使用preg_match_all()查找html中的所有图像
  • 下载所有图片。还在用史努比
  • 将下载的映像从tmp目录移动到另一个目录中,如果存在相同的imagename allready,则重命名为imagename_01、imagename_02等
  • 将图像名称和精确字节大小保存在db表中。这样可以避免多次下载同一图像
2) 在控制器中创建一个收集所有图像的方法

3) 设置定期收集图像的cronjob。wget-o/tmp/unavouse.html应该做得很好


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

正确-我将使用图像标签解析它,当然跳过化身等。我拥有所有者的权限,但我将作为第三方行事,无需访问。非常感谢。