2015-12-21 49 views
2

好吧,我正在學習網頁搜索並且學習某些東西的最佳方式是通過實際操作。我對Java很滿意,因此我選擇Jsoup,這是一個網絡報廢庫。我計劃刮谷歌,但我知道它的結果source。谷歌搜索的結果似乎很容易,但我發現很難標識所有顯示的內容,這是不可能的,因爲大部分內容都是動態的source,Google通過使用一堆客戶端JavaScript生成頁面。我放棄了搜索導致這裏使用下面的代碼如何在Java中檢索「檢查的源代碼」(Google chrome)?

package JsoupPrac; 
import java.io.IOException; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

public class GoogleScrapper { 

public static void main(String[] args) throws IOException{ 
Document doc; 
try{ 
doc = Jsoup.connect("https://www.google.co.in/search?as_q=&as_oq=query&as_eq=&as_nlo=&as_nhi=&lr=lang_en&cr=countryCA&as_qdr=all&as_sitesearch=&as_occt=any&safe=images&tbs=&as_filetype=&as_rights=&gws_rd=cr&ei=4Id1Vs7pC8rQjwOEkbP4CA#lr=lang_en&cr=countryCA&as_qdr=all&tbs=lr:lang_1en%2Cctr:countryCA&q=query") 
.userAgent("Mozilla").ignoreHttpErrors(true).timeout(0).get(); 

Elements links = doc.select("ol[class=g]"); 
for (Element link : links) { 
Elements titles = link.select("h3[class=r]"); 
String title = titles.text(); 
Elements bodies = link.select("span[class=st]"); 
String body = bodies.text(); 
System.out.println("Title: "+title); 
System.out.println("Body: "+body+"\n"); 
} 
} catch (IOException e) { 
e.printStackTrace(); 
} 
} 
} 

因此,與上面的代碼,並與

a[href]
迭代有點和尋找
abs:href
我能得到的所有URL的名單。

現在我發現的困難是獲取搜索結果頁面上的所有可用內容,該內容在源代碼中不可用,但可以通過inspect元素找到。所以我的問題是,有沒有一種方法(可能是第三方)收集我們在使用Java檢查任何網頁時獲得的所有源代碼。

+0

你確定''所有的源代碼''不是已經從scraping返回?我無法想象爲什麼JSoup會過濾HTML結果中的任何內容。 –

+0

那麼所有的代碼是不可用的,因爲它是由java腳本 – silverFoxA

回答

2

有沒有一種方法(可能是第三方)收集我們在使用Java檢查Google Chrome中的任何網頁時獲得的所有源代碼。

是的,我們可以做到這一點 - 通過selenium自動化一個真正的瀏覽器。

初始化驅動程序對象,導航到一個URL,並獲得driver.getPageSource()

WebDriver driver = new ChromeDriver(); 
driver.get(url); 

// sometimes here we might also need to wait for the page to load 

System.out.println(driver.getPageSource()); 

可以養活硒回到Jsoup頁面的源代碼,但要注意selenium本身在定位元素相當強大 - 你甚至可能不需要單獨的HTML解析器。

+0

請糾正我,如果我錯了,我們將檢索它的頁面源將不會得到我們在谷歌瀏覽頁面時得到的代碼,是? – silverFoxA

+0

@silverFoxA在這種情況下與您手動檢查的源代碼相同。 – alecxe

+0

謝謝它的工作原理,我有一個問題是如何在沒有瀏覽器加載的情況下在智能手機上實現相同的功能? – silverFoxA