成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

selenium 自動化爬蟲 5分鐘爬取新浪李敖大師1751條微博.

zhichangterry / 803人閱讀

摘要:是一個瀏覽器自動化測試框架可以模擬用戶的所有操作很久以前就想把李敖大師的所有微博爬取下來一直沒空前天看見群里有人推薦和就學了做了個你們想爬別人的只要把李敖大師的地址換成你要的就行了我還沒學不過我猜他就是去掉功能的瀏覽器這樣可以讓爬蟲更快如果

selenium 是一個瀏覽器自動化測試框架.可以模擬用戶的所有操作.

很久以前就想把李敖大師的所有微博爬取下來.一直沒空,前天看見群里有人推薦selenium和phantomjs 就學了selenium做了個demo.你們想爬別人的只要把李敖大師的地址換成你要的就行了.phantomjs我還沒學,不過我猜他就是去掉ui功能的瀏覽器.這樣可以讓爬蟲更快.如果專業(yè)做爬蟲的可以看看.我做這個是玩的.

數(shù)據(jù)庫結(jié)構(gòu)

學習地址: 慕課網(wǎng) selenium 教程
項目地址: spiderSina
環(huán)境:
ide:Netbeans
java包:非常多(在lib文件夾中)
瀏覽器驅(qū)動:ie,火狐,谷歌隨便選(在res文件夾內(nèi))

爬蟲思路:

打開新浪微博首頁并登錄

跳轉(zhuǎn)到李敖大師主頁

觸發(fā)ajax將一個頁面全部顯示出來

對每一個微博進行判斷解析 只獲取大師本人的微博
如果有展開全文就點擊點擊一下.然后將微博內(nèi)容插入數(shù)據(jù)庫

判斷是否有下一頁,如果有就到下一頁然后進入第四步

打開微博并登錄 這里的css選擇器就當jQuery用
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();
 
觸發(fā)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 + ")";
       //執(zhí)行js代碼 將頁面向下拉
       jse.executeScript(setscroll);
  }       
對每一個微博進行判斷解析 只獲取大師本人的微博
//獲取李大師所有的微博
List divs = driver.findElements(By.cssSelector("#Pl_Official_MyProfileFeed__23 div>.WB_cardwrap.WB_feed_type"));
//對每一條微博進行判斷是否為正常微博(非別人的點贊) 并進行展開全文 然后插入數(shù)據(jù)庫
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;
    //如果要運行的快一點就把數(shù)值改小,數(shù)值越小等待的時間越少
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.MILLISECONDS);
    //判斷是否微博中是否有超鏈接并且超鏈接內(nèi)容為展開全文 如果是就點擊
    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之內(nèi) 設置太久會浪費時間
        driver.manage().timeouts().implicitlyWait(300, TimeUnit.MILLISECONDS);
        //點擊 展開全文按鈕
        ele.findElement(By.cssSelector(".WB_feed_detail>.WB_detail>.WB_text.W_f14 a")).click();
        //獲取微博內(nèi)容
        weiboContent = ele.findElement(By.cssSelector(".WB_feed_detail>.WB_detail>div:last-of-type")).getText();
    } else {
    //如果沒有展開全文 獲取微博 這兩種內(nèi)容不在一個div里
        weiboContent = ele.findElement(By.cssSelector(".WB_feed_detail>.WB_detail>.WB_text.W_f14")).getText();
    }
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    //獲取大師發(fā)微博的時間
    String writeTime = ele.findElement(By.cssSelector(".WB_feed_detail>.WB_detail>.WB_from>a:first-of-type")).getText();
    //這里我想把微博中偶爾出現(xiàn)的零寬字符去掉但是失敗了,可能是版本問題.不想搞
    //weiboContent = weiboContent.replaceAll("u200b", "");
    //將微博插入數(shù)據(jù)庫
    this.insertToMysql(weiboContent, writeTime);
    //這個是獲取到的微博內(nèi)容調(diào)試時候可以打開看看在哪里出來問題
    // 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寫得話可能比較麻煩.
我本人對李敖大師十分敬仰,一直就想把他的語錄記下來.待他百年之后,有人在網(wǎng)上吹牛李敖說"xxx"
我能有勇氣發(fā)這個圖給他.

開個玩笑,我是為了學習.

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/67650.html

相關文章

  • 爬蟲問題總結(jié)

    摘要:編碼我們發(fā)現(xiàn),中有時候存在中文,這是就需要對進行編碼??梢韵葘⒅形霓D(zhuǎn)換成編碼,然后使用方法對參數(shù)進行編碼后傳遞。 本文檔對日常學習中用 python 做數(shù)據(jù)爬取時所遇到的一些問題做簡要記錄,以便日后查閱,部分問題可能因為認識不到位會存在一些誤解,敬請告知,萬分感謝,共同進步。 估算網(wǎng)站規(guī)模 該小節(jié)主要針對于整站爬取的情況。爬取整站之前,肯定是要先對一個網(wǎng)站的規(guī)模進行估計。這是可以使用g...

    nanfeiyan 評論0 收藏0
  • 利用新浪API實現(xiàn)數(shù)據(jù)的抓取微博數(shù)據(jù)爬取微博爬蟲

    摘要:本人長期出售超大量微博數(shù)據(jù)旅游網(wǎng)站評論數(shù)據(jù),并提供各種指定數(shù)據(jù)爬取服務,。如果用戶傳入偽造的,則新浪微博會返回一個錯誤。 PS:(本人長期出售超大量微博數(shù)據(jù)、旅游網(wǎng)站評論數(shù)據(jù),并提供各種指定數(shù)據(jù)爬取服務,Message to YuboonaZhang@Yahoo.com。由于微博接口更新后限制增大,這個代碼已經(jīng)不能用來爬數(shù)據(jù)了。如果只是為了收集數(shù)據(jù)可以咨詢我的郵箱,如果是為了學習爬蟲,...

    liuyix 評論0 收藏0
  • 利用新浪API實現(xiàn)數(shù)據(jù)的抓取微博數(shù)據(jù)爬取微博爬蟲

    摘要:本人長期出售超大量微博數(shù)據(jù)旅游網(wǎng)站評論數(shù)據(jù),并提供各種指定數(shù)據(jù)爬取服務,。如果用戶傳入偽造的,則新浪微博會返回一個錯誤。 PS:(本人長期出售超大量微博數(shù)據(jù)、旅游網(wǎng)站評論數(shù)據(jù),并提供各種指定數(shù)據(jù)爬取服務,Message to YuboonaZhang@Yahoo.com。由于微博接口更新后限制增大,這個代碼已經(jīng)不能用來爬數(shù)據(jù)了。如果只是為了收集數(shù)據(jù)可以咨詢我的郵箱,如果是為了學習爬蟲,...

    vslam 評論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時間永遠都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...

    Harriet666 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<