【问题标题】:Scraping images from one site to another将图像从一个站点抓取到另一个站点
【发布时间】:2011-07-28 08:31:12
【问题描述】:

我是新来的,对一般的 Web 开发也很陌生。我的背景是 3D 建模和设计,但我最近开始了一个项目,我认为这可能是 3D 社区的一个很好的资源。

我的页面主要是在这里设计和编码的:The Top Row,但我的知识也差不多了。上部和下部(艺术家聚光灯)部分将手动更新,所以我不担心这些。

我遇到问题的部分是“Best of the Rest”标题下的中间部分。我想做的是从七个著名的 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. 我的方向是否正确?

另外:我知道抓取是合法的灰色区域。我计划向所涉及的每个论坛征求许可,但我希望有一个可行的模型,以便在我提出要求时向他们展示。

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

【问题讨论】:

    标签: curl screen-scraping beautifulsoup lxml web-scraping


    【解决方案1】:

    我刷新了我的 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'}]
    

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

    【讨论】:

    • 真是个好人哈哈!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-15
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多