我是新来的,对于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
我已经阅读了很多不同的堆栈溢出线程,但是其中很多都是我的头脑。我没有太多的编程经验,但我怀疑我想要做的事情并不是那么复杂。
以下是我的主要问题:
这种刮刮的最佳(最简单)方法是什么?我一直看到带有Beautiful Soup或lxml的Python,但其他人推荐使用cURL和xPath的PHP。
是否有一种特定的方法可以减少源论坛的压力?这些论坛都拥有成千上万(或数百)的成员资格,所以这可能不是一个大问题,但如果可能的话,我很乐意这样做而不直接进行热链接。
我是否朝着正确的方向前进?
:我知道抓取是合法的灰色区域。我计划征求每个相关论坛的许可,但是我希望有一个工作模型可以在我问的时候展示它们。
任何帮助都会非常感激。我认为如果能让它发挥作用,这可能是一个很酷的网站。
答案 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。
如果您没有发现有关网页抓取的有趣内容并重视您的时间,那么最好聘请有经验的人为您做这件事。