从Javascript onclick()函数中抓取关于抓取和信息的建议

时间:2014-09-08 06:50:26

标签: javascript python selenium web-scraping import.io

我终于找到了一个关于这个主题的新手帮助的帖子,但我无法解决这个问题,部分原因是因为我是编程的新手:)

线程是: Newbie: How to overcome Javascript "onclick" button to scrape web page?

我有类似的问题。我想从中获取的网站有很多关于很多部分的信息,但我想只抓一些部分信息(公司,部件号等)。我有两个问题:

  1. 如何从本网站获取此类信息而无需提供搜索信息?使用抓取工具?

  2. 零件编号包含页面上的大部分信息,但页面上有Javascript' onclick()'功能,当它被点击时打开一个小窗口显示信息,除此之外,我想刮。如何在这个附加窗口中抓取信息?

  3. 我使用import.io,但建议切换到Selenium和PhantomJS。我会欢迎其他建议,而不是太复杂(或提供的说明,这将是很棒的!),其他工具。如果有人可以帮助我克服这个问题或提供指示,我将非常感激。谢谢。

1 个答案:

答案 0 :(得分:1)

如果您是新手并且想要创建用于数据提取的网络爬虫,那么我建议selenium但是,selenium webdriver比scrapy(用于编码网络爬虫的python框架)慢< / p>

当你被建议使用硒时,我只会使用python专注于硒。

第一期:“如何从此网站获取此类信息”

假设您要从中提取数据的网站为www.fundsupermart.co.in(选中此选项以显示如何处理新窗口弹出窗口)

使用硒,您可以写下来抓取:

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浏览器webdriver,并将加载get()方法中提供的链接页面

现在假设您要提取表,则可以使用selenium提供的函数使用tag_name,xpath或class_name进行提取。如果我想在“投资目标”下提取表格,请点击此处: enter image description here

然后为此我会:

right click -> inspect element -> find the appropriate tag from console -> right click -> copy 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的文档here

对于您的第二个问题:“如何在此额外窗口中抓取信息?”

要点击链接,您可以使用selenium提供的click()功能。假设在这里我想点击链接:Click here for price history然后我将获得xpath(如前所述)并添加行:

driver.find_element_by_xpath(xpath).click()

我将打开一个这样的新窗口:

enter image description here

现在要从新窗口中提取数据,您必须切换到新窗口,您可以通过添加以下行来执行此操作:

windows = driver.window_handles
driver.switch_to_window(windows[1])

现在,通过执行此操作,我已将webdriver切换到新窗口,现在我可以像之前那样提取数据并关闭此窗口并切换回原始窗口,只需添加:

driver.close()
driver.switch_to_window(windows[0])

这是使用硒的网络抓取工具的一种非常基本和天真的方法。给出here的教程非常好,对你有很大的帮助。