捕捉Facebook Like的数据
领导的要求向来稀奇古怪,这里让我爬Facebook 的Like数据了,页面看了半天,没找到好的方法,毕竟是一段JS,而selenium总是抓不住JS的内容,于是想到了一个很折中的方法。
1 import java.io.BufferedReader; 2 import java.io.BufferedWriter; 3 import java.io.File; 4 import java.io.FileReader; 5 import java.io.FileWriter; 6 import org.openqa.selenium.By; 7 import org.openqa.selenium.WebDriver; 8 import org.openqa.selenium.WebElement; 9 import org.openqa.selenium.firefox.FirefoxDriver; 10 11 public class facebook { 12 public static void main(String args[]){ 13 File f1 = new File("C:/new9.txt"); 14 File f2 = new File("C:/facebook.txt"); 15 String line=""; 16 String value="0"; 17 WebDriver dr = new FirefoxDriver(); 18 try { 19 20 FileReader reader = new FileReader(f1); 21 FileWriter writer = new FileWriter(f2,true); 22 BufferedReader br = new BufferedReader(reader); 23 BufferedWriter bw = new BufferedWriter(writer); 24 while((line=br.readLine())!=null){ 25 //文字处理根据自己的需求来处理 26 if(line.indexOf(".com//")!=-1){ 27 line=line.replaceAll(".com//", ".com/"); 28 line=line.replaceAll(":","%3A"); 29 line=line.replaceAll("/","%2F"); 30 //获取站点上的facebook JS内容 31 dr.get("https://www.facebook.com/plugins/like.php?api_key=&locale=en_US&sdk=joey&channel_url=http%3A%2F%2Fstatic.ak.facebook.com%2Fconnect%2Fxd_arbiter.php%3Fversion%3D18%23cb%3Df27c66007%26origin%3Dhttp%253A%252F%252Fwww.idealhomegarden.com%252Ff313e3c198%26domain%3Dwww.idealhomegarden.com%26relation%3Dparent.parent&href="+line+"&node_type=link&width=100&font=arial&layout=button_count&colorscheme=light&show_faces=false&send=false&extended_social_context=false"); 32 try{ 33 // 等待时间,如有需要可以添加,有时候网速太好,会报错 34 // dr.manage().timeouts().implicitlyWait(10000, TimeUnit.SECONDS); 35 WebElement element = dr.findElement(By.xpath("//span[@class='pluginCountTextDisconnected']")); 36 value=element.getText(); 37 System.out.println(value); 38 bw.write(value); 39 bw.newLine(); 40 bw.flush(); 41 }catch(Exception e){ 42 System.out.print("未找到网站"); 43 } 44 } 45 else{ 46 value="0"; 47 bw.write(value); 48 bw.newLine(); 49 bw.flush(); 50 } 51 } 52 dr.close(); 53 reader.close(); 54 writer.close(); 55 }catch (Exception e){ 56 System.out.print("系统错误"); 57 } 58 } 59 }
有些人会问,为什么用selenium,这个性能比较慢,而且多占内存,这个主要考虑衍生性了,这个还能抓google的,google的URL是HTTPS的,防止爬虫获取数据,当然写个多线程会更好。另外,这样的方式能抓各式各样的LIKE,在这个需求如扯淡的时代,需要的就是万能。。。。