1. 如何用java爬取AJAX載入後的頁面
普通的爬取是抓不了js的之後的數據的 可以用phantomjs或者htmlUnit實現
附上phantomjs示列代碼
package cn.wang.utils;
import java.util.Random;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.CookieManager;
import com.gargoylesoftware.htmlunit.;
import com.gargoylesoftware.htmlunit.WebClient;
public class htmlUnitUtils {
static WebClient webClient = null;
static Random random = new Random();
static{
//1.創建對象
webClient = new WebClient(BrowserVersion.CHROME);
//2.設置參數
//啟動js
webClient.getOptions().setJavaScriptEnabled(true);
//關閉css渲染
webClient.getOptions().setCssEnabled(false);
//啟動重定向
webClient.getOptions().setRedirectEnabled(true);
//設置連接超時時間 ,這里是10S。如果為0,則無限期等待
webClient.getOptions().setTimeout(1000 * 15);
//啟動cookie管理
webClient.setCookieManager(new CookieManager());
//啟動ajax代理
webClient.setAjaxController(new ());
//js運行時錯誤,是否拋出異常
webClient.getOptions().(false);
//設置瀏覽器請求信息
webClient.addRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
webClient.addRequestHeader("Accept-Encoding", "gzip, deflate");
webClient.addRequestHeader("Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2");
webClient.addRequestHeader("Connection", "keep-alive");
webClient.addRequestHeader("Upgrade-Insecure-Requests", "1");
}
public static void runJs(String url){
try {
webClient.addRequestHeader("User-Agent", Constant.useragents[random.nextInt(Constant.useragents.length)]);
//等待js渲染執行 waitime等待時間(ms)
webClient.waitForBackgroundJavaScript(1000 * 10);
//3.獲取頁面
webClient.getPage(url);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(webClient != null){
webClient.close();
}
}
}
public static void main(String[] args) {
runJs("http://www.gou.hk/");
System.setProperty("phantomjs.binary.path", "D:\\works\\tool\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
}
}
2. 如何用java爬蟲爬取招聘信息
1、思路:
明確需要爬取的信息
分析網頁結構
分析爬取流程
優化
2、明確需要爬取的信息
職位名稱
工資
職位描述
公司名稱
公司主頁
詳情網頁
分析網頁結構
3、目標網站-拉勾網
網站使用json作為交互數據,分析json數據,需要的json關鍵數據
查看需要的信息所在的位置,使用Jsoup來解析網頁
4、分析爬取流程
1.獲取所有的positionId生成詳情頁,存放在一個存放網址列表中List<String> joburls
2.獲取每個詳情頁並解析為Job類,得到一個存放Job類的列表List<Job> jobList
3.把List<Job> jobList存進Excel表格中
Java操作Excel需要用到jxl
5、關鍵代碼實現
public List<String> getJobUrls(String gj,String city,String kd){
String pre_url="https://www.lagou.com/jobs/";
String end_url=".html";
String url;
if (gj.equals("")){
url="http://www.lagou.com/jobs/positionAjax.json?px=default&city="+city+"&needAddtionalResult=false&first=false&pn="+pn+"&kd="+kd;
}else {
url="https://www.lagou.com/jobs/positionAjax.json?gj="+gj+"&px=default&city="+city+"&needAddtionalResult=false&first=false&pn="+pn+"&kd="+kd;
}
String rs=getJson(url);
System.out.println(rs);
int total= JsonPath.read(rs,"$.content.positionResult.totalCount");//獲取總數
int pagesize=total/15;
if (pagesize>=30){
pagesize=30;
}
System.out.println(total);
// System.out.println(rs);
List<Integer> posid=JsonPath.read(rs,"$.content.positionResult.result[*].positionId");//獲取網頁id
for (int j=1;j<=pagesize;j++){ //獲取所有的網頁id
pn++; //更新頁數
url="https://www.lagou.com/jobs/positionAjax.json?gj="+gj+"&px=default&city="+city+"&needAddtionalResult=false&first=false&pn="+pn+"&kd="+kd;
String rs2=getJson(url);
List<Integer> posid2=JsonPath.read(rs2,"$.content.positionResult.result[*].positionId");
posid.addAll(posid2); //添加解析的id到第一個list
}
List<String> joburls=new ArrayList<>();
//生成網頁列表
for (int id:posid){
String url3=pre_url+id+end_url;
joburls.add(url3);
}
return joburls;
}
public Job getJob(String url){ //獲取工作信息
Job job=new Job();
Document document= null;
document = Jsoup.parse(getJson(url));
job.setJobname(document.select(".name").text());
job.setSalary(document.select(".salary").text());
String joball=HtmlTool.tag(document.select(".job_bt").select("div").html());//清除html標簽
job.setJobdesc(joball);//職位描述包含要求
job.setCompany(document.select(".b2").attr("alt"));
Elements elements=document.select(".c_feature");
//System.out.println(document.select(".name").text());
job.setCompanysite(elements.select("a").attr("href")); //獲取公司主頁
job.setJobdsite(url);
return job;
}
void insertExcel(List<Job> jobList) throws IOException, BiffException, WriteException {
int row=1;
Workbook wb = Workbook.getWorkbook(new File(JobCondition.filename));
WritableWorkbook book = Workbook.createWorkbook(new File(JobCondition.filename), wb);
WritableSheet sheet=book.getSheet(0);
for (int i=0;i<jobList.size();i++){ //遍歷工作列表,一行行插入到表格中
sheet.addCell(new Label(0,row,jobList.get(i).getJobname()));
sheet.addCell(new Label(1,row,jobList.get(i).getSalary()));
sheet.addCell(new Label(2,row,jobList.get(i).getJobdesc()));
sheet.addCell(new Label(3,row,jobList.get(i).getCompany()));
sheet.addCell(new Label(4,row,jobList.get(i).getCompanysite()));
sheet.addCell(new Label(5,row,jobList.get(i).getJobdsite()));
row++;
}
book.write();
book.close();
}
3. java jsoup怎樣爬取特定網頁內的數據
1、Jsoup簡述
Java中支持的爬蟲框架有很多,比如WebMagic、Spider、Jsoup等。
Jsoup擁有十分方便的api來處理html文檔,比如參考了DOM對象的文檔遍歷方法,參考了CSS選擇器的用法等等,因此我們可以使用Jsoup快速地掌握爬取頁面數據的技巧。
2、快速開始
1)分析HTML頁面,明確哪些數據是需要抓取的
2)使用HttpClient讀取HTML頁面
HttpClient是一個處理Http協議數據的工具,使用它可以將HTML頁面作為輸入流讀進java程序中.
3)使用Jsoup解析html字元串
通過引入Jsoup工具,直接調用parse方法來解析一個描述html頁面內容的字元串來獲得一個Document對象。該Document對象以操作DOM樹的方式來獲得html頁面上指定的內容。
3、保存爬取的頁面數據
1)保存普通數據到資料庫中
將爬取的數據封裝進實體Bean中,並存到資料庫內。
2)保存圖片到伺服器上
直接通過下載圖片的方式將圖片保存到伺服器本地。
4. 如何用java語言爬取全國的天氣數據
天氣晴天:it's sunny today.
有風:it's windy outside.
多雲是cloudy,下雨是rainy,也有sprinkle是小雨,storm 暴雨
hurricane颶風,tornado龍卷風等等多種.
5. java怎麼爬取指定網頁的數據
把下面代碼復制到文本文檔中,然後將文本文檔改成".html"形式這個是提取表格中的數據的方法,看看是你想要的不NewDocument
6. java爬蟲抓取指定數據
根據java網路編程相關的內容,使用jdk提供的相關類可以得到url對應網頁的html頁面代碼。
針對得到的html代碼,通過使用正則表達式即可得到我們想要的內容。
比如,我們如果想得到一個網頁上所有包括「java」關鍵字的文本內容,就可以逐行對網頁代碼進行正則表達式的匹配。最後達到去除html標簽和不相關的內容,只得到包括「java」這個關鍵字的內容的效果。
從網頁上爬取圖片的流程和爬取內容的流程基本相同,但是爬取圖片的步驟會多一步。
需要先用img標簽的正則表達式匹配獲取到img標簽,再用src屬性的正則表達式獲取這個img標簽中的src屬性的圖片url,然後再通過緩沖輸入流對象讀取到這個圖片url的圖片信息,配合文件輸出流將讀到的圖片信息寫入到本地即可。
7. java 如何實現 獲取實時股票數據
一般有三種方式:
網頁爬蟲。採用爬蟲去爬取目標網頁的股票數據,去GitHub或技術論壇(如CSDN、51CTO)上找一下別人寫的爬蟲集成到項目中。
請求第三方API。會有專門的公司(例如網路API市場)提供股票數據,你只需要去購買他們的服務,使用他們提供的SDK,仿照demo開發實現即可。如下圖所示:
8. java 實現網路爬蟲用哪個爬蟲框架比較好
有些人問,開發網路爬蟲應該選擇Nutch、Crawler4j、WebMagic、scrapy、WebCollector還是其他的?這里按照我的經驗隨便扯淡一下:
上面說的爬蟲,基本可以分3類:
1.分布式爬蟲:Nutch
2.JAVA單機爬蟲:Crawler4j、WebMagic、WebCollector
3. 非JAVA單機爬蟲:scrapy
第一類:分布式爬蟲
爬蟲使用分布式,主要是解決兩個問題:
1)海量URL管理
2)網速
現在比較流行的分布式爬蟲,是Apache的Nutch。但是對於大多數用戶來說,Nutch是這幾類爬蟲里,最不好的選擇,理由如下:
1)Nutch是為搜索引擎設計的爬蟲,大多數用戶是需要一個做精準數據爬取(精抽取)的爬蟲。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設計的。對精抽取沒有太大的意義。也就是說,用Nutch做數據抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進行二次開發,來使得它適用於精抽取的業務,基本上就要破壞Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新寫一個分布式爬蟲框架了。
2)Nutch依賴hadoop運行,hadoop本身會消耗很多的時間。如果集群機器數量較少,爬取速度反而不如單機爬蟲快。
3)Nutch雖然有一套插件機制,而且作為亮點宣傳。可以看到一些開源的Nutch插件,提供精抽取的功能。但是開發過Nutch插件的人都知道,Nutch的插件系統有多蹩腳。利用反射的機制來載入和調用插件,使得程序的編寫和調試都變得異常困難,更別說在上面開發一套復雜的精抽取系統了。而且Nutch並沒有為精抽取提供相應的插件掛載點。Nutch的插件有隻有五六個掛載點,而這五六個掛載點都是為了搜索引擎服務的,並沒有為精抽取提供掛載點。大多數Nutch的精抽取插件,都是掛載在「頁面解析」(parser)這個掛載點的,這個掛載點其實是為了解析鏈接(為後續爬取提供URL),以及為搜索引擎提供一些易抽取的網頁信息(網頁的meta信息、text文本)。
4)用Nutch進行爬蟲的二次開發,爬蟲的編寫和調試所需的時間,往往是單機爬蟲所需的十倍時間不止。了解Nutch源碼的學習成本很高,何況是要讓一個團隊的人都讀懂Nutch源碼。調試過程中會出現除程序本身之外的各種問題(hadoop的問題、hbase的問題)。
5)很多人說Nutch2有gora,可以持久化數據到avro文件、hbase、mysql等。很多人其實理解錯了,這里說的持久化數據,是指將URL信息(URL管理所需要的數據)存放到avro、hbase、mysql。並不是你要抽取的結構化數據。其實對大多數人來說,URL信息存在哪裡無所謂。
6)Nutch2的版本目前並不適合開發。官方現在穩定的Nutch版本是nutch2.2.1,但是這個版本綁定了gora-0.3。如果想用hbase配合nutch(大多數人用nutch2就是為了用hbase),只能使用0.90版本左右的hbase,相應的就要將hadoop版本降到hadoop 0.2左右。而且nutch2的官方教程比較有誤導作用,Nutch2的教程有兩個,分別是Nutch1.x和Nutch2.x,這個Nutch2.x上寫的是可以支持到hbase 0.94。但是實際上,這個Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之後的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩定(一直在修改)。
所以,如果你不是要做搜索引擎,盡量不要選擇Nutch作為爬蟲。有些團隊就喜歡跟風,非要選擇Nutch來開發精抽取的爬蟲,其實是沖著Nutch的名氣(Nutch作者是Doug Cutting),當然最後的結果往往是項目延期完成。
如果你是要做搜索引擎,Nutch1.x是一個非常好的選擇。Nutch1.x和solr或者es配合,就可以構成一套非常強大的搜索引擎了。如果非要用Nutch2的話,建議等到Nutch2.3發布再看。目前的Nutch2是一個非常不穩定的版本。
9. 怎麼用網路爬蟲獲取數據基於java的
爬蟲的原理其實就是獲取到網頁內容,然後對其進行解析。只不過獲取的網頁、解析內容的方式多種多樣而已。
你可以簡單的使用httpclient發送get/post請求,獲取結果,然後使用截取字元串、正則表達式獲取想要的內容。
或者使用像Jsoup/crawler4j等這些已經封裝好的類庫,更方便的爬取信息。
10. java爬蟲代理如何實現
爬蟲離不開的就是代理伺服器了,如果我們不用http來爬蟲,ip不更改的情況下,是很難進行的。當我們在使用爬蟲爬取網站資料,速度快,可以不知疲倦地連續工作。但是由於爬蟲軟體在訪問網站時,行為過於頻繁,遠超人力操作速度,就很容易被網站察覺,而封掉用戶的IP。
所以,使用爬蟲軟體時,為了防止IP被封,或者IP已經被封,還想用自己的IP訪問封了自己IP的網站時,就要用到代理IP了。http能夠對我們的ip地址進行更改,這一操作能夠有效減少了網站的ip限制的影響,對爬蟲是很有幫助的。Ipidea含有240+國家地區的ip,真實住宅網路高度匿名強力保護本地信息。