新聞中心
Selenium是一個(gè)廣泛使用的自動(dòng)化測(cè)試框架,主要用于Web應(yīng)用程序測(cè)試。然而,Selenium的應(yīng)用領(lǐng)域不僅僅限于測(cè)試,它也可以被用來(lái)抽取或提取一個(gè)或多個(gè)網(wǎng)頁(yè)上的數(shù)據(jù)。而在這個(gè)過(guò)程中,數(shù)據(jù)庫(kù)的應(yīng)用也變得非常重要。

在此文中,我們將探討如何使用Selenium和數(shù)據(jù)庫(kù)結(jié)合起來(lái),有效地從表格中獲取數(shù)據(jù)。
之一步:打開(kāi)網(wǎng)頁(yè)
最初,我們需要使用Selenium打開(kāi)一個(gè)網(wǎng)頁(yè)。我們可使用Python API和web驅(qū)動(dòng)程序來(lái)做到這一點(diǎn)。例如,對(duì)于Chrome瀏覽器,我們可以使用ChromeDriver。
下面是一段用Python來(lái)打開(kāi)谷歌瀏覽器網(wǎng)站的例子:
“`
from selenium import webdriver
driver = webdriver.Chrome(“/usr/lib/chromium-browser/chromedriver”)
driver.get(“https://www.google.com/”)
“`
你將需要手動(dòng)安裝ChromeDriver,以便在上面的代碼中使用它。如果已經(jīng)安裝了,請(qǐng)確保指定了正確的路徑。
第二步:定位數(shù)據(jù)表格
一旦網(wǎng)頁(yè)被加載進(jìn)來(lái),我們就需要定位表格,從而能夠提取數(shù)據(jù)。對(duì)此,我們可以使用Selenium提供的不同方式。
例如,如果表格帶有唯一的id,您可以使用find_element_by_id()和它的標(biāo)識(shí)符,如下所示:
“`
table_element = driver.find_element_by_id(“mytable”)
“`
如果表格沒(méi)有id,但帶有唯一的類(lèi),可以使用find_element_by_class_name()和類(lèi)名來(lái)定位表格:
“`
table_element = driver.find_element_by_class_name(“mytableclass”)
“`
第三步:提取數(shù)據(jù)
在確定表格位置后,接下來(lái)需要從表格中提取數(shù)據(jù)了。雖然有多種方法可以做到這一點(diǎn),但使用Pandas庫(kù)是最簡(jiǎn)單的。
您需要使用Selenium提供的方法將數(shù)據(jù)提取到Pandas中。這可以通過(guò)以下方式實(shí)現(xiàn):
“`
import pandas as pd
table_html = table_element.get_attribute(‘outerHTML’)
df = pd.read_html(table_html)[0]
“`
這將使Selenium將表格HTML提取并將其放入變量table_html中。然后,Pandas使用這個(gè)HTML把表格轉(zhuǎn)換為數(shù)據(jù)框?qū)ο骴f。
最終,您可以將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。在本例中,我們將使用SQLite數(shù)據(jù)庫(kù)。
要使用Python的內(nèi)置sqlite3模塊連接到數(shù)據(jù)庫(kù):
“`
import sqlite3
conn = sqlite3.connect(‘mydb.sqlite’)
“`
隨后,將Pandas數(shù)據(jù)框?qū)ο髮?dǎo)出到數(shù)據(jù)庫(kù)中:
“`
df.to_sql(‘mytable’, con=conn, if_exists=’replace’)
“`
這將創(chuàng)建一個(gè)名為“mytable”的表,其中包含從網(wǎng)頁(yè)中提取的數(shù)據(jù)。
使用Selenium和數(shù)據(jù)庫(kù)結(jié)合,可以非常輕松地從表格中提取數(shù)據(jù)。通過(guò)Pandas將網(wǎng)頁(yè)中的表格數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)中,您可以輕松地進(jìn)行分析、可視化和提取調(diào)用。而通過(guò)使用Selenium作為Web自動(dòng)化測(cè)試框架,可節(jié)省時(shí)間和精力,讓方法變得更加高效。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
instrumentation test 什么時(shí)候調(diào)用setup teardown
這個(gè)問(wèn)題出現(xiàn)在這種情況,你的每個(gè)testCase都需要使用某一種初始化比較耗時(shí)的對(duì)象(資源),舉例如數(shù)據(jù)枯神庫(kù)連接、Spring Context。我們遇到的問(wèn)題是Selenium測(cè)試中開(kāi)啟和關(guān)閉瀏覽器,如果一個(gè)test啟動(dòng)關(guān)閉(我們的程序還需要登錄和注銷(xiāo)),這樣測(cè)試的時(shí)間會(huì) 拖的很長(zhǎng),給持續(xù)集成帶來(lái)了困難。
所以,我們需要在每組不會(huì)沖突的test中間共享一個(gè)瀏覽器窗口,這樣也就需要一個(gè)全局的setUp和 tearDown。問(wèn)題是JUnit 3.8.1里面的setUp和tearDown是在每個(gè)test之前和之后運(yùn)行的,如果在里面初始化沒(méi)隱虧和關(guān)閉瀏覽器就會(huì)造成上面所說(shuō)的問(wèn)題。要解決它,就產(chǎn) 生了如下3種思路:
1、升級(jí),使用JUnit4
JUnit4從TestNG里面吸取了兩個(gè)注釋?zhuān)篅BeforeClass和 @AfterClass
用它們注釋過(guò)的方法就會(huì)只初始化一次,完全符合我們的需求。
public class SeleniumTestCase extends SeleneseTestCase4 {
protected static final Log log = LogFactory.getLog(SeleniumTestCase.class);
protected static Selenium selenium = null;
@BeforeClass
public static void startSelenium() throws Exception {
log.debug(“Starting Selenium”);
selenium = SeleniumSession.getCurrentSession().getSelenium();
}
@AfterClass
public static void stopSelenium() throws Exception {
log.debug(“Stoping Selenium”);
selenium.stop();
}
}
這個(gè)里面的selenium = SeleniumSession.getCurrentSession().getSelenium();其實(shí)是個(gè)singleton,之一次open new,后來(lái)就直接返回selenium的instance(具體參考其它文章)。
這樣做非常舒服,因?yàn)橥耆皇荰rick,而是新的 feature,用起來(lái)踏實(shí)。這樣,這個(gè)類(lèi)的所有@Test就會(huì)公用一個(gè)selenium打開(kāi)的瀏覽器了。
那么缺點(diǎn)是什么呢?缺點(diǎn)是放到CI環(huán)境 的時(shí)候如果使用我們習(xí)慣的Ant寫(xiě)執(zhí)行腳本的話必須將Ant升級(jí)到1.7Beta3,因?yàn)锳nt 1.6.5的Junit task不支持JUnit4……當(dāng)然升級(jí)并不會(huì)帶來(lái)代碼的變化,但是問(wèn)題在于Ant 1.7還是Beta,而且JUnit4需要JDK5的Annotation,你的PM估計(jì)要撇嘴了
2、JVM級(jí)別鉤子法
因?yàn)镴VM支持關(guān)閉時(shí)執(zhí)行制定代碼的鉤子,而static代碼會(huì)在類(lèi)初始化時(shí)執(zhí)行, 再加上Ant調(diào)用的是類(lèi)似命令行的java命令,實(shí)際上每一個(gè)測(cè)試運(yùn)行在一個(gè)完整的JVM啟動(dòng)關(guān)閉周期攜擾里面,所以也就產(chǎn)生了這種解決方案。
這個(gè)方 案來(lái)自taowen同學(xué)的兩則Selenium經(jīng)驗(yàn)。
代碼我恢復(fù)了一下,大概是這樣:
public abstract class SomeTestCase extends TestCase {
static {
// perform the “global” set up logic
//這里的代碼會(huì)在類(lèi)初始化時(shí)執(zhí)行,所以相當(dāng)于BeforeClass
log.debug(“Starting Selenium”);
selenium = SeleniumSession.getCurrentSession().getSelenium();
// and now register the shutdown hook for tear down logic
//將一個(gè)匿名方法寫(xiě)到這里,就相當(dāng)于AfterClass
//給當(dāng)前的進(jìn)程注冊(cè)一個(gè)清理線程,當(dāng)進(jìn)程退出的時(shí)候,會(huì)執(zhí)行線程中的代 碼。
Runtime.getRuntime().addShutdownHook(
new Thread(){
public void run() {
log.debug(“Stoping Selenium”);
selenium.stop();
}
}
);
}
}
這 個(gè)方法挺酷的,我認(rèn)為完全可以被稱(chēng)作“奇技淫巧”。缺點(diǎn)就是,有點(diǎn)不好看。
3、還有別的方法,這個(gè)來(lái)自Selenium網(wǎng)站,似乎是不錯(cuò) 的中庸方案。
import junit.framework.*;
import junit.extensions.TestSetup;
public class AllTestsOneTimeSetup {
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(SomeTest.suite());
suite.addTest(AnotherTest.suite());
TestSetup wrapper = new TestSetup(suite) {
protected void setUp() {
oneTimeSetUp();
}
protected void tearDown() {
oneTimeTearDown();
}
};
return wrapper;
}
public static void oneTimeSetUp() {
// one-time initialization code
}
public static void oneTimeTearDown() {
// one-time cleanup code
}
}
Python中的爬蟲(chóng)框架有哪些呢?
實(shí)現(xiàn)爬蟲(chóng)技術(shù)的編程環(huán)境有很多種,Java、Python、C++等都可以用來(lái)爬蟲(chóng)。但很多人選擇Python來(lái)寫(xiě)爬蟲(chóng),為什么呢?因?yàn)镻ython確實(shí)很適合做爬蟲(chóng),豐富的第三方庫(kù)十分強(qiáng)大,簡(jiǎn)單幾行代碼便可實(shí)現(xiàn)你想要的功能。更重要的,Python也是數(shù)據(jù)挖掘和分析的好能手。那么,Python爬蟲(chóng)一般用什么框架比較好?
一般來(lái)講,只有在遇到比較大型的需求時(shí),才會(huì)使用Python爬蟲(chóng)框架。這樣的做的主要目的,是為了方便管理以及擴(kuò)展。本文我將向大家推薦十個(gè)Python爬蟲(chóng)框架。
1、Scrapy:Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫(xiě)的應(yīng)用框架。 可桐搜晌以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。它是很強(qiáng)大的爬蟲(chóng)框架,可以滿(mǎn)足簡(jiǎn)單的頁(yè)面爬取,比如可以明確獲知url pattern的情況。用這個(gè)框架可以輕松爬下來(lái)如亞馬遜商品信息之類(lèi)的數(shù)據(jù)。但是對(duì)于稍微復(fù)雜一點(diǎn)的頁(yè)面,如weibo的頁(yè)面信息,這個(gè)框架就滿(mǎn)足不了需求了。它的特性有:HTML, XML源數(shù)據(jù) 選擇及提取 的內(nèi)置支持;提供了一系列在spider之間共享的可復(fù)用的過(guò)濾器(即 Item Loaders),對(duì)智能處理爬取數(shù)據(jù)提供了內(nèi)置支持。
2、Crawley:高速爬取對(duì)應(yīng)網(wǎng)站的內(nèi)容,支持關(guān)系和非關(guān)系數(shù)據(jù)庫(kù),數(shù)據(jù)可以導(dǎo)出為ON、XML等。
3、Portia:是一個(gè)開(kāi)源可視化爬蟲(chóng)工具,可讓使用者在不需要任何編程知識(shí)的情況下爬取網(wǎng)站!簡(jiǎn)單地注釋自己感興趣的頁(yè)面,Portia將創(chuàng)建一個(gè)蜘蛛來(lái)從類(lèi)似的頁(yè)面提取數(shù)據(jù)。簡(jiǎn)單來(lái)講,它是基于scrapy內(nèi)核;可視化爬取內(nèi)容,不需要任何開(kāi)發(fā)專(zhuān)業(yè)知識(shí);動(dòng)態(tài)匹配相同模板的內(nèi)容。
4、newspaper:可以用來(lái)提取新聞、文章和內(nèi)容分析。使用多線程,支持10多種語(yǔ)言等。作者從requests庫(kù)的簡(jiǎn)潔與強(qiáng)大得到靈感,使用Python開(kāi)發(fā)的可用于提取文章內(nèi)容的程序。支持10多種語(yǔ)言并且所有的都是unicode編碼。
5、Python-goose:Java寫(xiě)的文章提取工具。Python-goose框架可提取的信息包括:文章主體內(nèi)容、文章主要圖片、文章中嵌入的任何Youtube/Vimeo視頻、元描述、元標(biāo)簽。
6、Beautiful Soup:名氣大,整合了一些常用爬蟲(chóng)需求。它是一個(gè)可以從HTML或XML文件中提取漏螞數(shù)據(jù)的Python庫(kù)。它能夠通過(guò)你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航,查找,修改文檔的方式.Beautiful Soup會(huì)幫你節(jié)省數(shù)小時(shí)甚至數(shù)天的工作時(shí)間。Beautiful Soup的缺點(diǎn)是不能加載。
7、mechanize:它的優(yōu)點(diǎn)是可以加載。當(dāng)然它也有缺點(diǎn),比如文檔嚴(yán)重缺失。不過(guò)通過(guò)官方的example以及人肉嘗試的方法,還是勉強(qiáng)能用的。
8、selenium:這是一個(gè)調(diào)用瀏覽器的driver,通過(guò)這個(gè)庫(kù)你可以直接調(diào)用瀏覽器完成某些操作,比如輸入驗(yàn)證碼。Selenium是自動(dòng)化測(cè)試工具,它支持各種瀏覽器,包括 Chrome,Safari,F(xiàn)irefox等主流界面式瀏覽器,如果在這些瀏覽器里面安裝一個(gè) Selenium 的插件,可以方便地實(shí)現(xiàn)Web界面的測(cè)試. Selenium支持瀏覽器驅(qū)動(dòng)。Selenium支持多種語(yǔ)言開(kāi)發(fā),比如 Java,C,Ruby等等,Phantom 用來(lái)渲染解析,Selenium 用來(lái)驅(qū)動(dòng)以及與Python的對(duì)接,Python進(jìn)行后期的處理。
9、cola:是一個(gè)分布式的爬蟲(chóng)框架,對(duì)于用戶(hù)來(lái)說(shuō),只需編寫(xiě)幾個(gè)特定的函數(shù),而無(wú)需關(guān)注分布式運(yùn)行的細(xì)節(jié)。任務(wù)會(huì)自動(dòng)分配到多臺(tái)機(jī)器上,整個(gè)過(guò)程對(duì)用戶(hù)是透明的。項(xiàng)目整體設(shè)計(jì)有點(diǎn)糟,模塊間耦合度較高。
10、PySpider:一個(gè)國(guó)人編寫(xiě)的強(qiáng)大的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)并帶有強(qiáng)大的WebUI。采用Python語(yǔ)言編寫(xiě),分布式架構(gòu),支持多種數(shù)據(jù)庫(kù)后端,強(qiáng)大的WebUI支持腳本編輯器,任務(wù)監(jiān)視器,項(xiàng)目管理器以及結(jié)果局鋒查看器。Python腳本控制,可以用任何你喜歡的html解析包。
selenium 獲取表格數(shù)據(jù)庫(kù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于selenium 獲取表格數(shù)據(jù)庫(kù),Selenium與數(shù)據(jù)庫(kù):有效獲取表格數(shù)據(jù),instrumentation test 什么時(shí)候調(diào)用setup teardown,Python中的爬蟲(chóng)框架有哪些呢?的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)-老牌IDC、云計(jì)算及IT信息化服務(wù)領(lǐng)域的服務(wù)供應(yīng)商,業(yè)務(wù)涵蓋IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心)服務(wù)、云計(jì)算服務(wù)、IT信息化、AI算力租賃平臺(tái)(智算云),軟件開(kāi)發(fā),網(wǎng)站建設(shè),咨詢(xún)熱線:028-86922220
當(dāng)前標(biāo)題:Selenium與數(shù)據(jù)庫(kù):有效獲取表格數(shù)據(jù)(selenium獲取表格數(shù)據(jù)庫(kù))
鏈接URL:http://fisionsoft.com.cn/article/dpdgjoo.html


咨詢(xún)
建站咨詢(xún)
