由于我没有在普通维基媒体中找到API函数来获取图像的许可,因此唯一要做的就是获取网页并自己解析它。
对于每张图片,维基媒体都有一个很好的弹出窗口,其中列出了我需要的“归因”字段。
例如,在页面http://commons.wikimedia.org/wiki/File:Brad_Pitt_Cannes_2011.jpg中,右侧有一个链接"Use this file on the web"
。点击它我可以看到我需要的“归因”字段。
使用Python,如何获取网页并启动javascript调用以打开弹出窗口以检索“归因”字段中的文本?
谢谢!
梅尔
答案 0 :(得分:4)
使用unutbu的答案,我将其转换为使用Selenium WebDriver(而不是旧的Selenium-RC)。
import codecs
import lxml.html as lh
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://commons.wikimedia.org/wiki/File%3aBrad_Pitt_Cannes_2011.jpg')
content = browser.page_source
browser.quit()
doc = lh.fromstring(content)
for elt in doc.xpath('//span[a[contains(@title,"Use this file")]]/text()'):
print elt
输出:
on the web
on a wiki
答案 1 :(得分:1)
假设您可以阅读Javascript,您可以查看此Javascript文件:http://commons.wikimedia.org/w/index.php?title=MediaWiki:Stockphoto.js&action=raw&ctype=text/javascript
你可以看到Javascript的功能,以获取它的信息(查看get_author_attribution
和get_license
。您可以使用BeautifulSoup
将其移植到Python来解析HTML。
答案 2 :(得分:1)
我有兴趣看看如何使用其他工具完成此操作。使用Selenium RC和lxml,可以这样做:
import selenium
sel=selenium.selenium("localhost",4444,"*firefox", "file://")
sel.start()
sel.open('http://commons.wikimedia.org/wiki/File%3aBrad_Pitt_Cannes_2011.jpg')
sel.click('//a[contains(@title,"Use this file on the web")]')
print(sel.get_value('//input[@id="stockphoto_attribution"]'))
sel.stop()
产量
Georges Biard [CC-BY-SA-3.0 (www.creativecommons.org/licenses/by-sa/3.0)], via Wikimedia Commons