摘要:是一個瀏覽器自動化測試框架可以模擬用戶的所有操作很久以前就想把李敖大師的所有微博爬取下來一直沒空前天看見群里有人推薦和就學了做了個你們想爬別人的只要把李敖大師的地址換成你要的就行了我還沒學不過我猜他就是去掉功能的瀏覽器這樣可以讓爬蟲更快如果
selenium 是一個瀏覽器自動化測試框架.可以模擬用戶的所有操作.
很久以前就想把李敖大師的所有微博爬取下來.一直沒空,前天看見群里有人推薦selenium和phantomjs 就學了selenium做了個demo.你們想爬別人的只要把李敖大師的地址換成你要的就行了.phantomjs我還沒學,不過我猜他就是去掉ui功能的瀏覽器.這樣可以讓爬蟲更快.如果專業做爬蟲的可以看看.我做這個是玩的.
數據庫結構爬蟲思路:學習地址: 慕課網 selenium 教程
項目地址: spiderSina
環境:
ide:Netbeans
java包:非常多(在lib文件夾中)
瀏覽器驅動:ie,火狐,谷歌隨便選(在res文件夾內)
打開微博并登錄 這里的css選擇器就當jQuery用打開新浪微博首頁并登錄
跳轉到李敖大師主頁
觸發ajax將一個頁面全部顯示出來
對每一個微博進行判斷解析 只獲取大師本人的微博
如果有展開全文就點擊點擊一下.然后將微博內容插入數據庫判斷是否有下一頁,如果有就到下一頁然后進入第四步
baseUrl = "https://weibo.com"; //打開微博主頁面 driver.get(baseUrl); //設置窗口最大化 driver.manage().window().maximize(); //輸入用戶名 driver.findElement(By.cssSelector("#loginname")).clear(); driver.findElement(By.cssSelector("#loginname")).sendKeys(sinaUsername); //輸出密碼 driver.findElement(By.cssSelector("#pl_login_form .info_list.password input")).clear(); driver.findElement(By.cssSelector("#pl_login_form .info_list.password input")).sendKeys(password); //點擊登錄 driver.findElement(By.cssSelector("#pl_login_form.login_box div.login_innerwrap div.W_login_form .login_btn")).click();觸發ajax將一個頁面全部顯示出來
//判斷是否有下一頁那個按鈕 沒的就向下拉 for (int i = 0, scrollY = 5000; i < 20; i++, scrollY += 5000) { //判斷是否有下一頁那個div 如果有就表示到底了 if (this.isElementPresent(By.cssSelector(".page.next.S_txt1.S_line1"))) { break; } String setscroll = "window.scrollTo(0," + scrollY + ")"; //執行js代碼 將頁面向下拉 jse.executeScript(setscroll); }對每一個微博進行判斷解析 只獲取大師本人的微博
//獲取李大師所有的微博 Listdivs = driver.findElements(By.cssSelector("#Pl_Official_MyProfileFeed__23 div>.WB_cardwrap.WB_feed_type")); //對每一條微博進行判斷是否為正常微博(非別人的點贊) 并進行展開全文 然后插入數據庫 divs.forEach((WebElement ele) -> { String isZan = ele.findElement(By.cssSelector("div:first-of-type")).getAttribute("class"); if (!("WB_cardtitle_b S_line2".equals(isZan))) { String weiboContent; //如果要運行的快一點就把數值改小,數值越小等待的時間越少 driver.manage().timeouts().implicitlyWait(10, TimeUnit.MILLISECONDS); //判斷是否微博中是否有超鏈接并且超鏈接內容為展開全文 如果是就點擊 if (this.isElementPresent(By.cssSelector(".WB_feed_detail>.WB_detail>.WB_text.W_f14 a"), ele) && "展開全文".equals(ele.findElement(By.cssSelector(".WB_feed_detail>.WB_detail>.WB_text.W_f14 a")).getText().trim())) { //這里獲取全文應該是300ms之內 設置太久會浪費時間 driver.manage().timeouts().implicitlyWait(300, TimeUnit.MILLISECONDS); //點擊 展開全文按鈕 ele.findElement(By.cssSelector(".WB_feed_detail>.WB_detail>.WB_text.W_f14 a")).click(); //獲取微博內容 weiboContent = ele.findElement(By.cssSelector(".WB_feed_detail>.WB_detail>div:last-of-type")).getText(); } else { //如果沒有展開全文 獲取微博 這兩種內容不在一個div里 weiboContent = ele.findElement(By.cssSelector(".WB_feed_detail>.WB_detail>.WB_text.W_f14")).getText(); } driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //獲取大師發微博的時間 String writeTime = ele.findElement(By.cssSelector(".WB_feed_detail>.WB_detail>.WB_from>a:first-of-type")).getText(); //這里我想把微博中偶爾出現的零寬字符去掉但是失敗了,可能是版本問題.不想搞 //weiboContent = weiboContent.replaceAll("u200b", ""); //將微博插入數據庫 this.insertToMysql(weiboContent, writeTime); //這個是獲取到的微博內容調試時候可以打開看看在哪里出來問題 // System.out.println(weiboContent + " "); }
});
判斷是否有下一頁//查看按鈕的文本是否為"下一頁" 如果是那就還有下一頁 WebElement nextPage = driver.findElement(By.cssSelector("#Pl_Official_MyProfileFeed__23 .WB_cardwrap.S_bg2>div>a:last-of-type")); String strNext = nextPage.getText(); if ("下一頁".equals(strNext)) { nextPage.click(); this.getPage(); }
沒有了... 其實selenium普通玩家應該很快就能上手.高端玩法沒試過.主要就是看一下他重要的幾個api
如果不知道api 就百度還有寫demo猜api用法.
本來想用php寫的,但是php寫得話可能比較麻煩.
我本人對李敖大師十分敬仰,一直就想把他的語錄記下來.待他百年之后,有人在網上吹牛李敖說"xxx"
我能有勇氣發這個圖給他.
開個玩笑,我是為了學習.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67650.html
摘要:本人長期出售超大量微博數據旅游網站評論數據,并提供各種指定數據爬取服務,。如果用戶傳入偽造的,則新浪微博會返回一個錯誤。 PS:(本人長期出售超大量微博數據、旅游網站評論數據,并提供各種指定數據爬取服務,Message to YuboonaZhang@Yahoo.com。由于微博接口更新后限制增大,這個代碼已經不能用來爬數據了。如果只是為了收集數據可以咨詢我的郵箱,如果是為了學習爬蟲,...
摘要:本人長期出售超大量微博數據旅游網站評論數據,并提供各種指定數據爬取服務,。如果用戶傳入偽造的,則新浪微博會返回一個錯誤。 PS:(本人長期出售超大量微博數據、旅游網站評論數據,并提供各種指定數據爬取服務,Message to YuboonaZhang@Yahoo.com。由于微博接口更新后限制增大,這個代碼已經不能用來爬數據了。如果只是為了收集數據可以咨詢我的郵箱,如果是為了學習爬蟲,...
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
閱讀 2725·2023-04-25 17:58
閱讀 2992·2021-11-15 11:38
閱讀 2392·2021-11-02 14:48
閱讀 1201·2021-08-25 09:40
閱讀 1834·2019-08-30 15:53
閱讀 1107·2019-08-30 15:52
閱讀 1043·2019-08-30 13:55
閱讀 2445·2019-08-29 15:21