一些爬虫的示例

1.基于Jsoup的爬虫实现:
Jsoup是一个不错的Html网页爬取和解析工具,根据其强大的功能和简洁的API实现很多功能,总结一下相关示例:
(1) 引入pom资源:

    <!--jsoup 组件-->
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.7.3</version>
    </dependency>

(2) 页面抓取:

public class JsoupUtil {
/**
 * 通过Jsoup获取文档信息
 * @param url
 * @return
 * @throws IOException
 */
public static  Document getDocument(String url) throws IOException {
    return Jsoup.connect(url).timeout(3000).get();
}

public static  Document getDocument(String url,boolean isIgnoreContentType) throws IOException {
    return Jsoup.connect(url).ignoreContentType(isIgnoreContentType).timeout(5000).get();
}
/**
 * 可以设置头信息
 * @param url
 * @param header
 * @return
 * @throws IOException
 */
public static Document getDocument(String url,Map<String,String> header) throws IOException {

    Connection conn = Jsoup.connect(url);
    for(Map.Entry<String, String> entry : header.entrySet()) {
        conn.header(entry.getKey(), entry.getValue());
    }
    return conn.ignoreContentType(true).timeout(5000).get();
}

}

简述:一个页面抓取的工具类,比较简单,主要涉及页面的http访问以及解析。待爬取的页面情况很多在爬取的过程中遇到的问题总结如下:a.有些页面爬取有一些限制条件,比如http必须设置refer,或者必须设置cookie,这个需要分析浏览器的请求,补充相关http字段即可模拟浏览器的请求。b.有些文档的返回类型不能支持比如返回一个json类型的文档,这个时候就要设置ignoreContentType字段,才不会报错。

(3)页面的解析:
针对页面的解析,这就要求熟悉DOM的API结构了。主要是Xpath的语法。

//爬取 id=team_fight_table 的table标签,并且获取包含matchid的tr列表
Elements trList = doc.select("table[id=team_fight_table]").select("tr[matchid]");
//获取包含class=table_type 所有table信息,并且获取tbody子标签。
Elements tbodyList = doc.select("table[class=tab_style]").select("tbody");
//获取包含class=livejstjtable newlivetable 这2个class的div的标签信息。
List<String> tsInfo = doInternalParseTeam(doc,season,"div[class=livejstjtable newlivetable]")
//根据tag获取标签信息
Elements trList = doc.getElementsByTag("tr");

2.基于HTMLUnit爬虫的实现:
有些页面通过Jsoup是爬取不到的,比如微博的数据,因为有些页面是通过异步JS渲染的,即数据被爬取到之后需要在浏览器端执行一定的js逻辑才能将数据补充到页面上。因为JSOUP没有继承js执行引擎,所以异步的数据即使被抓回来也不能也不能用js渲染。所以需要用到更高级的HTMLUnit工具才行,HTMLUNIT是一个比较完备的组件,相当于java端的浏览器,其中包含了一个js和css执行引擎。具体实例代码如下:

package spider.common
import com.gargoylesoftware.htmlunit.html.HtmlPage
import com.gargoylesoftware.htmlunit.{BrowserVersion, WebClient}
import com.gargoylesoftware.htmlunit.util.Cookie
/**
 * Created by jianying.wcj on 2015/1/9 0009.
 */
object HtmlUnit {

    val wc = new WebClient(BrowserVersion.CHROME)

    def init(cookie: Map[String,String]) {
      for((k,v) <- cookie) {
        wc.getCookieManager.addCookie(new Cookie("weibo.com",k,v))
      }
      wc.getCookieManager.setCookiesEnabled(true)
      wc.getOptions.setJavaScriptEnabled(true)
      wc.getOptions.setCssEnabled(true)
      wc.getOptions.setRedirectEnabled(true)
      wc.getOptions.setThrowExceptionOnScriptError(false)
      wc.getOptions.setTimeout(5000)
      //让js执行一会
      wc.waitForBackgroundJavaScript(5000)
    }

    def getResponse(url : String) : HtmlPage = {
        val page = wc.getPage(url).asInstanceOf[HtmlPage]
        //wc.closeAllWindows()
        page
    }
}

pom地址:

<dependency>
        <groupId>net.sourceforge.htmlunit</groupId>
        <artifactId>htmlunit</artifactId>
        <version>2.15</version>
</dependency>

3.以上Jsoup和HtmlUnit两个爬去页面的部分示例代码,涉及的语言分别是java和scala。但是要是对爬虫的支持还是Python比较强大,Python的scrapy框架对爬虫做了很强大的支持,但是考虑到python在公司部署不叫苦难就没有,示例:http://blog.csdn.net/lantian0802/article/details/42687173

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值