web爬蟲系列(一)- 爬取電影天堂迅雷地址
阿新 • • 發佈:2019-12-31
一、爬蟲介紹
目前爬蟲框架層出不窮,當然很多公司也會根據自己的業務做二次開發,Java的有WebMagic和WebCollector等,Python的有PySpider和Scrapy等。不能說孰好孰壞,只能說根據自己的業務場景選擇不同框架,Python作為爬蟲的開發語言已經火的一塌糊塗,但是我為什麼選擇Java語言呢?因為我不會Python,也不想勞神費力再學一門語言,那就從Java的WebMagic玩起吧。
爬蟲的應用場景也各色各異,比如有好玩的同學喜歡爬取網易雲音樂的熱門評論、還有人爬各種招聘網站的在招職位。商業用途也有很多,比如競品分析、全球POI更新等等。
二、入門示例–爬去電影天堂的下載
1、簡單分析頁面
紅色1是我們要的內容,紅色2是對應的html結構。
2、maven匯入如下jar包
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-core</artifactId>
<version>0.7.3</version>
</dependency>
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-extension</artifactId>
<version>0.7.3</version>
</dependency>
複製程式碼
3、解析dom,獲取到電影名稱及其對應的詳情頁連結
package com.daervin.demo;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Html;
import us.codecraft.webmagic.selector.Selectable;
import java.util.List;
public class FilmProcessor implements PageProcessor {
public static final String URL = "http://www.dytt8.net" ;
@Override
public void process(Page page) {
Html html = page.getHtml();
//解析列表頁
List<Selectable> contentNodes = html.xpath("//div[@class='co_content2']/ul/a").nodes();
for (int i = 1; i < contentNodes.size(); i++) {
//第一條過濾,從第二條開始遍歷
Selectable linkNode = contentNodes.get(i);
if (linkNode == null) {
continue;
}
String linkTmp = linkNode.links().get();
if (linkTmp != null && linkTmp.length() > 0) {
//將找到的連結放到addTargetRequest裡面,會自動發起請求
page.addTargetRequest(linkTmp);
//輸出到控制檯
System.out.println(linkTmp);
}
}
}
@Override
public Site getSite() {
return Site.me().setTimeOut(10000);
}
}
複製程式碼
4、執行爬蟲並列印結果
package com.daervin.demo;
import us.codecraft.webmagic.Spider;
public class FilmTest {
public static void main(String[] args) {
Spider.create(new FilmProcessor()).addUrl(FilmProcessor.URL).run();
}
}
複製程式碼
只是拿到了列表對應的詳情頁地址,沒達到獲取下載地址的目的!繼續...
5、分析詳情頁 - 深入爬取詳情頁
獲取到電影名稱和迅雷下載地址
package com.daervin.demo;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Html;
import us.codecraft.webmagic.selector.Selectable;
import java.util.List;
public class FilmProcessor implements PageProcessor {
public static final String URL = "http://www.dytt8.net";
@Override
public void process(Page page) {
Html html = page.getHtml();
//解析列表頁
if (URL.equals(page.getUrl().toString())) {
//抽取結果
List<Selectable> contentNodes = html.xpath("//div[@class='co_content2']/ul/a").nodes();
for (int i = 1; i < contentNodes.size(); i++) {
//第一條過濾,從第二條開始遍歷
Selectable linkNode = contentNodes.get(i);
if (linkNode == null) {
continue;
}
String linkTmp = linkNode.links().get();
if (linkTmp != null && linkTmp.length() > 0) {
//將找到的連結放到addTargetRequest裡面,會自動發起請求
page.addTargetRequest(linkTmp);
//輸出到控制檯
System.out.println(linkTmp);
}
}
} else {//解析電影詳情頁面
//獲取html
Selectable movieNameS = html.xpath("//title/text()");
Selectable movieDownloadS = html.xpath("//a[starts-with(@href,'ftp')]/text()");
System.out.println("movieName:" + movieNameS.get());
System.out.println("downloadURL:" + movieDownloadS.get());
System.out.println("-----------------------------------");
}
}
@Override
public Site getSite() {
return Site.me().setTimeOut(10000);
}
}
複製程式碼
三、亂彈琴
菜鳥一隻,歡迎交流。