将图像从一个站点抓取到另一个站点

问题描述 投票:0回答:2

我是新来的,总体来说对 Web 开发还很陌生。 我的背景是 3D 建模和设计,但我最近启动了一个项目,我认为该项目可能是 3D 社区的一个很好的资源。

我的页面主要设计和编码在这里:顶行,但我的知识已经结束了。 上部和下部(艺术家聚光灯)部分将手动更新,所以我不担心这些。

我遇到问题的部分是“其余最佳”标题下的中间部分。 我想要做的是从七个著名的 CG 论坛中抓取图像(和链接),并将它们显示在我布置的内容区域中。 每个论坛的页面顶部都有一个部分,显示五到六张精选图像。

例如,如果您查看 CGSociety:他们的顶行有六件特色作品。 我想获取三个最新的并将它们显示在我的 CGSociety 内容框中并链接到原始线程。 获得链接也很重要,因为该网站的全部目的是为值得的艺术家带来曝光度。

图像始终位于相同位置,并且始终具有可预测的路径,一直到图像名称:

即:

http://features.cgsociety.org/cgtalk/plugs/"featured image".jpg

我不知道它是否相关,但图像的 xpath 也可靠。 对于 CGSociety 来说,图像基本上是由最终括号中包含的数字决定的。

/x:html/x:body/x:div[4]/x:div/x:div/x:table[1]/x:tbody/x:tr/x:td[1]/x:a/x:img

我读过很多不同的堆栈溢出线程,但其中很多都超出了我的理解范围。 我没有太多的编程经验,但我怀疑我想做的事情并不是那么复杂。

所以这是我的主要问题:

  1. 这种刮擦的最佳(最简单)方法是什么?我一直看到 Python 与 Beautiful Soup 或 lxml 被提及,但其他人推荐 PHP 与 cURL 和 xPath。

  2. 有没有一种特定的方法可以将源论坛的压力降到最低? 这些论坛都有数万(或数十万)会员,因此这可能不是一个大问题,但如果可能的话,我希望在不直接热链接的情况下做到这一点。

  3. 我的方向正确吗?

另外:我知道抓取是一个合法的灰色地带。 我计划征求每个相关论坛的许可,但我希望有一个工作模型可以在我提出要求时向他们展示。

任何帮助都将非常非常感谢。我认为如果我能让它正常工作,这可能是一个很酷的网站。

web-scraping curl beautifulsoup lxml
2个回答
4
投票

我稍微刷新了我的 lxml 知识,并为您编写了一些代码,从该页面中获取您想要的内容:

import lxml.html

images = []

html = lxml.html.parse("http://forums.cgsociety.org/")
table = html.xpath("//div[@class='page']/div[1]/table[1]")[0]

for cell in table.iterfind(".//td"):
    image = {}
    image['img_url'] = cell.find('a/img').get('src')
    image['link_url'] = cell.find('a').get('href')
    images.append(image)

images
现在包含:

[{'img_url': 'http://features.cgsociety.org/cgtalk/plugs/meind_p.jpg',
  'link_url': 'http://forums.cgsociety.org/showthread.php?s=&threadid=975814&utm_medium=plugblock&utm_source=cgtalk'},
 {'img_url': 'http://features.cgsociety.org/cgtalk/plugs/plugimg.jpg',
  'link_url': 'http://forums.cgsociety.org/showthread.php?s=&threadid=975032&utm_medium=plugblock&utm_source=cgtalk'},
 {'img_url': 'http://features.cgsociety.org/cgtalk/plugs/cg_portfolio_elmoooo.jpg',
  'link_url': 'http://elmoooo.cgsociety.org/gallery/?z=0&utm_medium=plugblock&utm_source=cgtalk'},
 {'img_url': 'http://features.cgsociety.org/cgtalk/plugs/suck_p.jpg',
  'link_url': 'http://forums.cgsociety.org/showthread.php?s=&threadid=973971&utm_medium=plugblock&utm_source=cgtalk'},
 {'img_url': 'http://features.cgsociety.org/cgtalk/plugs/cry_p.jpg',
  'link_url': 'http://forums.cgsociety.org/showthread.php?s=&threadid=972537&utm_medium=plugblock&utm_source=cgtalk'},
 {'img_url': 'http://features.cgsociety.org/cgtalk/plugs/gerrard_p.jpg',
  'link_url': 'http://forums.cgsociety.org/showthread.php?s=&threadid=972012&utm_medium=plugblock&utm_source=cgtalk'}]

如果您需要更多帮助,请随时向我发送电子邮件(您可以在我的个人资料中找到它)。


0
投票

这些图像很容易抓取,因此请使用您更熟悉的语言。使用 Xpath 是一个很好的方法。

确保将图像下载到您的服务器,而不是从源网站加载它们,否则某些网站会阻止您的 IP。

如果您觉得学习网络抓取并不有趣并且不珍惜您的时间,那么最好聘请经验丰富的人来为您做这件事。

© www.soinside.com 2019 - 2024. All rights reserved.