我终于找到了一个关于这个主题的新手帮助的帖子,但我无法解决这个问题,部分原因是因为我是编程的新手:)
线程是: Newbie: How to overcome Javascript "onclick" button to scrape web page?
我有类似的问题。我想从中获取的网站有很多关于很多部分的信息,但我想只抓一些部分信息(公司,部件号等)。我有两个问题:
如何从本网站获取此类信息而无需提供搜索信息?使用抓取工具?
零件编号包含页面上的大部分信息,但页面上有Javascript' onclick()'功能,当它被点击时打开一个小窗口显示信息,除此之外,我想刮。如何在这个附加窗口中抓取信息?
我使用import.io,但建议切换到Selenium和PhantomJS。我会欢迎其他建议,而不是太复杂(或提供的说明,这将是很棒的!),其他工具。如果有人可以帮助我克服这个问题或提供指示,我将非常感激。谢谢。
答案 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进行提取。如果我想在“投资目标”下提取表格,请点击此处:
然后为此我会:
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()
我将打开一个这样的新窗口:
现在要从新窗口中提取数据,您必须切换到新窗口,您可以通过添加以下行来执行此操作:
windows = driver.window_handles
driver.switch_to_window(windows[1])
现在,通过执行此操作,我已将webdriver切换到新窗口,现在我可以像之前那样提取数据并关闭此窗口并切换回原始窗口,只需添加:
driver.close()
driver.switch_to_window(windows[0])
这是使用硒的网络抓取工具的一种非常基本和天真的方法。给出here的教程非常好,对你有很大的帮助。