使用Python解析带有javascript调用的网站

时间:2011-09-17 10:06:50

标签: python parsing

由于我没有在普通维基媒体中找到API函数来获取图像的许可,因此唯一要做的就是获取网页并自己解析它。

对于每张图片,维基媒体都有一个很好的弹出窗口,其中列出了我需要的“归因”字段。 例如,在页面http://commons.wikimedia.org/wiki/File:Brad_Pitt_Cannes_2011.jpg中,右侧有一个链接"Use this file on the web"。点击它我可以看到我需要的“归因”字段。

使用Python,如何获取网页并启动javascript调用以打开弹出窗口以检索“归因”字段中的文本?

谢谢!

梅尔

3 个答案:

答案 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_attributionget_license。您可以使用BeautifulSoup将其移植到Python来解析HTML。

答案 2 :(得分:1)

我有兴趣看看如何使用其他工具完成此操作。使用Selenium RClxml,可以这样做:

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