最近中文字幕2019高清,亚洲人成高清在线播放,男生淦哭男生图片动漫有字,国产亚洲精品九九久在线观看,无码av专区丝袜专区

Webmagic(爬蟲(chóng))抓取新浪博客案例

優(yōu)采云 發(fā)布時(shí)間: 2020-05-19 08:00

  Webmagic框架更側重實(shí)際的內容抓取。今天為你們分享Webmagic 爬蟲(chóng)框架抓取新浪博客的案例。

  我們以作者的新浪博客 作為反例。在這個(gè)事例里,我們要從最終的博客文章頁(yè)面,抓取博客的標題、內容、日期等信息,也要從列表頁(yè)抓取博客的鏈接等信息,從而獲取這個(gè)博客的所有文章。

  列表頁(yè)的格式是““, 其中“0_1”中的“1”是可變的頁(yè)數。

  

  文章頁(yè)的格式是“”,其中“95b4e3010102xsua”是可變的字符。

  

  通過(guò)前面的剖析新浪博客超級爬蟲(chóng)(網(wǎng)站推廣工具) v14綠色版,我先要找到文章的 url,再愈發(fā) url 獲取文章。所以怎么發(fā)覺(jué)這個(gè)博客中所有的文章地址,是爬蟲(chóng)的第一步。

  我們可以使用正則表達式 +//.html 對 URL 進(jìn)行一次簡(jiǎn)略過(guò)濾。這里比較復雜的是,這個(gè) URL 過(guò)于空泛,可能會(huì )抓取到其他博客的信息,所以我們必須從列表頁(yè)中指定的區域獲取 URL。

  在這里,我們使用 xpath//div[@class=//”articleList//”]選中所有區域,再使用 links()或者 xpath//a/@href 獲取所有鏈接,最后再使用正則表達式 +//.html,對 URL 進(jìn)行過(guò)濾,去掉一些“編輯”或者“更多”之類(lèi)的鏈接。于是,我們可以這樣寫(xiě):

   page.addTargetRequests(

page.getHtml().xpath("//div[@class=/"articleList/"]"

).links().regex("http://blog//.sina//.com//.cn/s/blog_//w+//.html").all());

  同時(shí),我們須要把所有找到的列表頁(yè)也加到待下載的 URL 中去:

   page.addTargetRequests(

page.getHtml().links().regex(

"http://blog//.sina//.com//.cn/s/articlelist_1487828712_0_//d+//.html").all());

  文章頁(yè)面信息的抽取是比較簡(jiǎn)單的,寫(xiě)好對應的 xpath 抽取表達式就可以了。

   page.putField("title", page.getHtml().xpath("//div[@class='articalTitle']/h2"));

page.putField("content", page.getHtml().xpath(

"//div[@id='articlebody']//div[@class='articalContent']"));

page.putField("date",page.getHtml().xpath(

"//div[@id='articlebody']//span[@class='time SG_txtc']").regex("//((.*)//)"));

  現在,我們早已定義了對列表和目標頁(yè)進(jìn)行處理的方法,現在我們須要在處理時(shí)對她們進(jìn)行分辨。在這個(gè)反例中,區分方法很簡(jiǎn)單,因為列表頁(yè)和目標頁(yè)在 URL 格式上是不同的,所以直接用 URL 區分就可以了!

  這個(gè)反例完整的代碼如下:

   package us.codecraft.webmagic.samples;

import us.codecraft.webmagic.Page;

import us.codecraft.webmagic.Site;

import us.codecraft.webmagic.Spider;

import us.codecraft.webmagic.processor.PageProcessor;

public class SinaBlogProcessor implements PageProcessor {

public static final String URL_LIST = "http://blog//.sina//.com//.cn/s/articlelist_1487828712_0_//d+//.html";

public static final String URL_POST = "http://blog//.sina//.com//.cn/s/blog_//w+//.html";

private Site site = Site.me().setDomain("blog.sina.com.cn").setSleepTime(3000).setUserAgent(

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31");

@Override public void process(Page page) {

//列表頁(yè)

if (page.getUrl().regex(URL_LIST).match()) {

page.addTargetRequests(page.getHtml().xpath("//div[@class=/"articleList/"]").links().regex(URL_POST).all());

page.addTargetRequests(page.getHtml().links().regex(URL_LIST).all());

//文章頁(yè)} else {

page.putField("title", page.getHtml().xpath("//div[@class='articalTitle']/h2"));

page.putField("content", page.getHtml().xpath("//div[@id='articlebody']//div[@class='articalContent']"));

page.putField("date",page.getHtml().xpath("//div[@id='articlebody']//span[@class='time SG_txtc']").regex("//((.*)//)"));}}

@Override public Site getSite() {

return site;}

public static void main(String[] args) {

Spider.create(new SinaBlogProcessor()).addUrl("http://blog.sina.com.cn/s/articlelist_1487828712_0_1.html").run();

} }

  通過(guò)這個(gè)反例我們可以發(fā)覺(jué)主要使用幾個(gè)方式:

  如果你認為用 if-else 來(lái)分辨不同處理有些不方便新浪博客超級爬蟲(chóng)(網(wǎng)站推廣工具) v14綠色版,那么可以使用 SubPageProcessor 來(lái)解決這個(gè)問(wèn)題。

0 個(gè)評論

要回復文章請先登錄注冊


官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

最近中文字幕2019高清,亚洲人成高清在线播放,男生淦哭男生图片动漫有字,国产亚洲精品九九久在线观看,无码av专区丝袜专区