❶ java爬蟲抓取指定數據
如何通過Java代碼實現對網頁數據進行指定抓取,我總結了有以下幾個步驟中會使用到jsoup.Jar包:
1、在工程中導入Jsoup.jar包
2、獲取網址url指定HTML或者文檔指定的body
3、獲取網頁中超鏈接的標題和鏈接
4、獲取指定博客文章的內容
5、獲取網頁中超鏈接的標題和鏈接的結果
❷ java爬蟲代理如何實現
爬蟲離不開的就是代理伺服器了,如果我們不用http來爬蟲,ip不更改的情況下,是很難進行的內。當我們在使用爬蟲容爬取網站資料,速度快,可以不知疲倦地連續工作。但是由於爬蟲軟體在訪問網站時,行為過於頻繁,遠超人力操作速度,就很容易被網站察覺,而封掉用戶的IP。
所以,使用爬蟲軟體時,為了防止IP被封,或者IP已經被封,還想用自己的IP訪問封了自己IP的網站時,就要用到代理IP了。http能夠對我們的ip地址進行更改,這一操作能夠有效減少了網站的ip限制的影響,對爬蟲是很有幫助的。Ipidea含有240+國家地區的ip,真實住宅網路高度匿名強力保護本地信息。
❸ 如何使用JAVA編寫爬蟲將爬到的數據存儲到MySql資料庫
Scrapy依賴於來twisted,源所以如果Scrapy能用,twisted肯定是已經安裝好了。
抓取到的數據,可以直接丟到MySQL,也可以用Django的ORM模型丟到MySQL,方便Django調用。方法也很簡單,按資料庫的語句來寫就行了,在spiders目錄里定義自己的爬蟲時也可以寫進去。
當然使用pipelines.py是更通用的方法,以後修改也更加方便。你的情況,應該是沒有在Settings.py里定義pipelines,所以Scrapy不會去執行,就不會生成pyc文件了。
❹ java爬蟲實時獲取頁面數據並存入資料庫
這種是工作上的問題把。
沒給點好處很難做。
需要一個定時任務。不斷去掃這個頁面。一有更新馬上獲取。
獲取需要用到解析html標簽的jar包。
很簡單。但是不想在這浪費時間給你寫。
❺ java爬蟲怎麼抓取登陸後的網頁數據
一般爬蟲都不會抓登錄以後的頁面,
如果你只是臨時抓某個站,可以模擬登錄,然後拿到登錄以後的Cookies,再去請求相關的頁面。
❻ 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)保存圖片到伺服器上
直接通過下載圖片的方式將圖片保存到伺服器本地。
❼ JAVA怎麼弄爬蟲
以下是一個使用java實現的簡單爬蟲核心代碼:
public void crawl() throws Throwable {
while (continueCrawling()) {
CrawlerUrl url = getNextUrl(); //獲取待爬取隊列中的下一個URL
if (url != null) {
printCrawlInfo();
String content = getContent(url); //獲取URL的文本信息
//聚焦爬蟲只爬取與主題內容相關的網頁,這里採用正則匹配簡單處理
if (isContentRelevant(content, this.regexpSearchPattern)) {
saveContent(url, content); //保存網頁至本地
//獲取網頁內容中的鏈接,並放入待爬取隊列中
Collection urlStrings = extractUrls(content, url);
addUrlsToUrlQueue(url, urlStrings);
} else {
System.out.println(url + " is not relevant ignoring ...");
}
//延時防止被對方屏蔽
Thread.sleep(this.delayBetweenUrls);
}
}
closeOutputStream();
}
private CrawlerUrl getNextUrl() throws Throwable {
CrawlerUrl nextUrl = null;
while ((nextUrl == null) && (!urlQueue.isEmpty())) {
CrawlerUrl crawlerUrl = this.urlQueue.remove();
//doWeHavePermissionToVisit:是否有許可權訪問該URL,友好的爬蟲會根據網站提供的"Robot.txt"中配置的規則進行爬取
//isUrlAlreadyVisited:URL是否訪問過,大型的搜索引擎往往採用BloomFilter進行排重,這里簡單使用HashMap
//isDepthAcceptable:是否達到指定的深度上限。爬蟲一般採取廣度優先的方式。一些網站會構建爬蟲陷阱(自動生成一些無效鏈接使爬蟲陷入死循環),採用深度限制加以避免
if (doWeHavePermissionToVisit(crawlerUrl)
&& (!isUrlAlreadyVisited(crawlerUrl))
&& isDepthAcceptable(crawlerUrl)) {
nextUrl = crawlerUrl;
// System.out.println("Next url to be visited is " + nextUrl);
}
}
return nextUrl;
}
private String getContent(CrawlerUrl url) throws Throwable {
//HttpClient4.1的調用與之前的方式不同
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url.getUrlString());
StringBuffer strBuf = new StringBuffer();
HttpResponse response = client.execute(httpGet);
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
HttpEntity entity = response.getEntity();
if (entity != null) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(entity.getContent(), "UTF-8"));
String line = null;
if (entity.getContentLength() > 0) {
strBuf = new StringBuffer((int) entity.getContentLength());
while ((line = reader.readLine()) != null) {
strBuf.append(line);
}
}
}
if (entity != null) {
nsumeContent();
}
}
//將url標記為已訪問
markUrlAsVisited(url);
return strBuf.toString();
}
public static boolean isContentRelevant(String content,
Pattern regexpPattern) {
boolean retValue = false;
if (content != null) {
//是否符合正則表達式的條件
Matcher m = regexpPattern.matcher(content.toLowerCase());
retValue = m.find();
}
return retValue;
}
public List extractUrls(String text, CrawlerUrl crawlerUrl) {
Map urlMap = new HashMap();
extractHttpUrls(urlMap, text);
extractRelativeUrls(urlMap, text, crawlerUrl);
return new ArrayList(urlMap.keySet());
}
private void extractHttpUrls(Map urlMap, String text) {
Matcher m = (text);
while (m.find()) {
String url = m.group();
String[] terms = url.split("a href=\"");
for (String term : terms) {
// System.out.println("Term = " + term);
if (term.startsWith("http")) {
int index = term.indexOf("\"");
if (index > 0) {
term = term.substring(0, index);
}
urlMap.put(term, term);
System.out.println("Hyperlink: " + term);
}
}
}
}
private void extractRelativeUrls(Map urlMap, String text,
CrawlerUrl crawlerUrl) {
Matcher m = relativeRegexp.matcher(text);
URL textURL = crawlerUrl.getURL();
String host = textURL.getHost();
while (m.find()) {
String url = m.group();
String[] terms = url.split("a href=\"");
for (String term : terms) {
if (term.startsWith("/")) {
int index = term.indexOf("\"");
if (index > 0) {
term = term.substring(0, index);
}
String s = //" + host + term;
urlMap.put(s, s);
System.out.println("Relative url: " + s);
}
}
}
}
public static void main(String[] args) {
try {
String url = "";
Queue urlQueue = new LinkedList();
String regexp = "java";
urlQueue.add(new CrawlerUrl(url, 0));
NaiveCrawler crawler = new NaiveCrawler(urlQueue, 100, 5, 1000L,
regexp);
// boolean allowCrawl = crawler.areWeAllowedToVisit(url);
// System.out.println("Allowed to crawl: " + url + " " +
// allowCrawl);
crawler.crawl();
} catch (Throwable t) {
System.out.println(t.toString());
t.printStackTrace();
}
}
❽ java爬蟲怎麼抓取js動態生成的內容
我用Jsoup寫爬蟲,一般遇到html返回沒有的內容。但是瀏覽器顯示有的內容。都是專分析頁面的http請求日誌。分屬析頁面JS代碼來解決。
1、有些頁面元素被隱藏起來了->換selector解決
2、有些數據保存在js/json對象中->截取對應的串,分析解決
3、通過api介面調用->偽造請求獲得數據
還有一個終極方法
4、使用phantomjs或者casperjs這種headless瀏覽器
❾ Java網路爬蟲怎麼實現
網路爬蟲是一個自動提取網頁的程序,它為搜索引擎從萬維網上下載網頁,是搜索引擎的重要組成。x0dx0a傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統的一定停止條件。對於垂直搜索來說,聚焦爬蟲,即有針對性地爬取特定主題網頁的爬蟲,更為適合。x0dx0ax0dx0a以下是一個使用java實現的簡單爬蟲核心代碼:x0dx0apublic void crawl() throws Throwable { x0dx0a while (continueCrawling()) { x0dx0a CrawlerUrl url = getNextUrl(); //獲取待爬取隊列中的下一個URL x0dx0a if (url != null) { x0dx0a printCrawlInfo(); x0dx0a String content = getContent(url); //獲取URL的文本信息 x0dx0a x0dx0a //聚焦爬蟲只爬取與主題內容相關的網頁,這里採用正則匹配簡單處理 x0dx0a if (isContentRelevant(content, this.regexpSearchPattern)) { x0dx0a saveContent(url, content); //保存網頁至本地 x0dx0a x0dx0a //獲取網頁內容中的鏈接,並放入待爬取隊列中 x0dx0a Collection urlStrings = extractUrls(content, url); x0dx0a addUrlsToUrlQueue(url, urlStrings); x0dx0a } else { x0dx0a System.out.println(url + " is not relevant ignoring ..."); x0dx0a } x0dx0a x0dx0a //延時防止被對方屏蔽 x0dx0a Thread.sleep(this.delayBetweenUrls); x0dx0a } x0dx0a } x0dx0a closeOutputStream(); x0dx0a}x0dx0aprivate CrawlerUrl getNextUrl() throws Throwable { x0dx0a CrawlerUrl nextUrl = null; x0dx0a while ((nextUrl == null) && (!urlQueue.isEmpty())) { x0dx0a CrawlerUrl crawlerUrl = this.urlQueue.remove(); x0dx0a //doWeHavePermissionToVisit:是否有許可權訪問該URL,友好的爬蟲會根據網站提供的"Robot.txt"中配置的規則進行爬取 x0dx0a //isUrlAlreadyVisited:URL是否訪問過,大型的搜索引擎往往採用BloomFilter進行排重,這里簡單使用HashMap x0dx0a //isDepthAcceptable:是否達到指定的深度上限。爬蟲一般採取廣度優先的方式。一些網站會構建爬蟲陷阱(自動生成一些無效鏈接使爬蟲陷入死循環),採用深度限制加以避免 x0dx0a if (doWeHavePermissionToVisit(crawlerUrl) x0dx0a && (!isUrlAlreadyVisited(crawlerUrl)) x0dx0a && isDepthAcceptable(crawlerUrl)) { x0dx0a nextUrl = crawlerUrl; x0dx0a // System.out.println("Next url to be visited is " + nextUrl); x0dx0a } x0dx0a } x0dx0a return nextUrl; x0dx0a}x0dx0aprivate String getContent(CrawlerUrl url) throws Throwable { x0dx0a //HttpClient4.1的調用與之前的方式不同 x0dx0a HttpClient client = new DefaultHttpClient(); x0dx0a HttpGet httpGet = new HttpGet(url.getUrlString()); x0dx0a StringBuffer strBuf = new StringBuffer(); x0dx0a HttpResponse response = client.execute(httpGet); x0dx0a if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) { x0dx0a HttpEntity entity = response.getEntity(); x0dx0a if (entity != null) { x0dx0a BufferedReader reader = new BufferedReader( x0dx0a new InputStreamReader(entity.getContent(), "UTF-8")); x0dx0a String line = null; x0dx0a if (entity.getContentLength() > 0) { x0dx0a strBuf = new StringBuffer((int) entity.getContentLength()); x0dx0a while ((line = reader.readLine()) != null) { x0dx0a strBuf.append(line); x0dx0a } x0dx0a } x0dx0a } x0dx0a if (entity != null) { x0dx0a nsumeContent(); x0dx0a } x0dx0a } x0dx0a //將url標記為已訪問 x0dx0a markUrlAsVisited(url); x0dx0a return strBuf.toString(); x0dx0a}x0dx0apublic static boolean isContentRelevant(String content, x0dx0aPattern regexpPattern) { x0dx0a boolean retValue = false; x0dx0a if (content != null) { x0dx0a //是否符合正則表達式的條件 x0dx0a Matcher m = regexpPattern.matcher(content.toLowerCase()); x0dx0a retValue = m.find(); x0dx0a } x0dx0a return retValue; x0dx0a}x0dx0apublic List extractUrls(String text, CrawlerUrl crawlerUrl) { x0dx0a Map urlMap = new HashMap(); x0dx0a extractHttpUrls(urlMap, text); x0dx0a extractRelativeUrls(urlMap, text, crawlerUrl); x0dx0a return new ArrayList(urlMap.keySet()); x0dx0a} x0dx0aprivate void extractHttpUrls(Map urlMap, String text) { x0dx0a Matcher m = (text); x0dx0a while (m.find()) { x0dx0a String url = m.group(); x0dx0a String[] terms = url.split("a href=\""); x0dx0a for (String term : terms) { x0dx0a // System.out.println("Term = " + term); x0dx0a if (term.startsWith("http")) { x0dx0a int index = term.indexOf("\""); x0dx0a if (index > 0) { x0dx0a term = term.substring(0, index); x0dx0a } x0dx0a urlMap.put(term, term); x0dx0a System.out.println("Hyperlink: " + term); x0dx0a } x0dx0a } x0dx0a } x0dx0a} x0dx0aprivate void extractRelativeUrls(Map urlMap, String text, x0dx0a CrawlerUrl crawlerUrl) { x0dx0a Matcher m = relativeRegexp.matcher(text); x0dx0a URL textURL = crawlerUrl.getURL(); x0dx0a String host = textURL.getHost(); x0dx0a while (m.find()) { x0dx0a String url = m.group(); x0dx0a String[] terms = url.split("a href=\""); x0dx0a for (String term : terms) { x0dx0a if (term.startsWith("/")) { x0dx0a int index = term.indexOf("\""); x0dx0a if (index > 0) { x0dx0a term = term.substring(0, index); x0dx0a } x0dx0a String s = //" + host + term; x0dx0a urlMap.put(s, s); x0dx0a System.out.println("Relative url: " + s); x0dx0a } x0dx0a } x0dx0a } x0dx0a x0dx0a}x0dx0apublic static void main(String[] args) { x0dx0a try { x0dx0a String url = ""; x0dx0a Queue urlQueue = new LinkedList(); x0dx0a String regexp = "java"; x0dx0a urlQueue.add(new CrawlerUrl(url, 0)); x0dx0a NaiveCrawler crawler = new NaiveCrawler(urlQueue, 100, 5, 1000L, x0dx0a regexp); x0dx0a // boolean allowCrawl = crawler.areWeAllowedToVisit(url); x0dx0a // System.out.println("Allowed to crawl: " + url + " " + x0dx0a // allowCrawl); x0dx0a crawler.crawl(); x0dx0a } catch (Throwable t) { x0dx0a System.out.println(t.toString()); x0dx0a t.printStackTrace(); x0dx0a } x0dx0a}