关于爬取Javascript onclick() 函数信息的建议
我终于找到一个关于新手帮助的讨论串,但我在解决这个问题上还是没有进展,部分原因是我对编程还很陌生 :)
这个讨论串是: 新手:如何克服Javascript的“onclick”按钮来抓取网页?
我遇到了类似的问题。我想抓取的网站上有很多零件的信息,但我只想抓取某些特定零件的信息(比如公司、零件编号等)。我有两个问题:
如何在不输入搜索信息的情况下从这个网站抓取这些信息?需要用爬虫吗?
一个零件编号页面上有大部分信息,但页面上有个Javascript的'onclick()'函数,点击后会弹出一个小窗口,显示我还想抓取的信息。我该如何抓取这个额外窗口中的信息?
我现在在用import.io,但有人建议我换成Selenium和PhantomJS。我也欢迎其他建议,最好是简单易懂的工具(或者提供一些说明,那就太好了!)。如果有人能帮我解决这个问题或者提供一些指导,我会非常感激。谢谢。
1 个回答
如果你是新手,想要创建一个网页爬虫来提取数据,我推荐你使用selenium,不过要注意,selenium的速度比scrapy(一个用于编写网页爬虫的Python框架)要慢。
既然你被建议使用selenium,我就只讲讲如何用Python来使用selenium。
关于你的第一个问题:“如何从这个网站获取信息”
假设你想提取数据的网站是www.fundsupermart.co.in(我选择这个网站是为了演示如何处理弹出新窗口)。
使用selenium,你可以通过编写以下代码来爬取数据:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://www.fundsupermart.co.in/main/fundinfo/mutualfund-AXIS-BANKING-DEBT-FUND--GROWTH-AXS0077.html')
这段代码会打开Firefox浏览器,并加载你在get()
方法中提供的链接页面。
现在假设你想提取一个表格,你可以通过标签名、xpath或类名来提取,selenium提供了这些功能。比如,如果我想提取“投资目标”下的表格:

那么我会这样做:
右键点击 -> 检查元素 -> 从控制台找到合适的标签 -> 右键点击 -> 复制xpath
我发现<tbody>
标签是我可以提取表格的地方,所以我右键点击它并选择复制xpath,得到了这个标签的xpath:
xpath=/html/body/table/tbody/tr[2]/td/table/tbody/tr[3]/td/table[2]/tbody/tr/td/table/tbody/tr[1]/td/font/table/tbody/tr[1]/td/table/tbody/tr[5]/td/table/tbody
然后在代码中添加这一行:
driver.find_element_by_xpath(xpath).text
同样,你也可以从任何网站提取其他数据,具体可以参考selenium的文档这里。
关于你的第二个问题:“如何抓取这个额外窗口中的信息?”
要点击链接,你可以使用selenium提供的click()
函数。假设我想点击链接:点击这里查看价格历史
,那么我会像之前那样获取xpath,并添加这一行:
driver.find_element_by_xpath(xpath).click()
这样我就会打开一个新窗口:
现在,要从新窗口提取数据,你需要切换到新窗口,可以通过添加这一行来实现:
windows = driver.window_handles
driver.switch_to_window(windows[1])
这样做后,我就切换到了新窗口,现在可以像之前一样提取数据。如果想关闭这个窗口并切换回原来的窗口,只需添加:
driver.close()
driver.switch_to_window(windows[0])
这就是使用selenium进行网页爬虫的一个非常基础和简单的方法。这里的教程非常好,会对你有很大帮助。