将图像从一个站点刮到另一个站点

时间:2011-04-02 18:17:44

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

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

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

我遇到麻烦的部分是“最佳休息”标题下的中间部分。我想要做的是从七个着名的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. 这种刮刮的最佳(最简单)方法是什么?我一直看到带有Beautiful Soup或lxml的Python,但其他人推荐使用cURL和xPath的PHP。

  2. 是否有一种特定的方法可以减少源论坛的压力?这些论坛都拥有成千上万(或数百)的成员资格,所以这可能不是一个大问题,但如果可能的话,我很乐意这样做而不直接进行热链接。

  3. 我是否朝着正确的方向前进?

  4. :我知道抓取是合法的灰色区域。我计划征求每个相关论坛的许可,但是我希望有一个工作模型可以在我问的时候展示它们。

    任何帮助都会非常感激。我认为如果能让它发挥作用,这可能是一个很酷的网站。

2 个答案:

答案 0 :(得分: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'}]

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

答案 1 :(得分:0)

这些图像很容易刮,所以请使用您更有经验的语言。使用Xpath是一种很好的方法。

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

如果您没有发现有关网页抓取的有趣内容并重视您的时间,那么最好聘请有经验的人为您做这件事。