0

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

主题是: 新手:如何克服Javascript“onclick”按钮来抓取网页?

我有一个类似的问题。我想抓取的网站有很多零件的大量信息,但我只想抓取某些零件信息(公司、零件编号等)。我有两个问题:

  1. 如何在不输入搜索信息的情况下从本站获取此类信息?使用爬虫?

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

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

4

1 回答 1

2

如果你是一个新手并且你想创建一个用于数据提取的网络爬虫,那么我会推荐selenium但是,selenium webdriver 比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 浏览器 webdriver 并加载get()方法中提供的链接的页面

现在假设如果你想提取一个表,那么你可以通过使用 selenium 提供的函数使用它的 tag_name、xpath 或 class_name 来提取。如果我想在“投资目标”下提取表格,就像这里一样: 在此处输入图像描述

然后为此我将:

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 的文档

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

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

driver.find_element_by_xpath(xpath).click()

我会像这样打开一个新窗口:

在此处输入图像描述

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

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

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

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

这是使用 selenium 的网络爬虫的一种非常基本和幼稚的方法。这里给出的教程非常好,对你有很大帮助。

于 2014-09-08T10:44:18.670 回答