Jsoup+HttpUnit爬取搜狐新闻

怎么说呢,静态的页面,但我也写了动态的接口支持,方便后续爬取别的新闻网站使用。

一个接口,接口有一个抽象方法pullNews用于拉新闻,有一个默认方法用于获取新闻首页:

public interface NewsPuller {

    void pullNews();

    // url:即新闻首页url
    // useHtmlUnit:是否使用htmlunit
    default Document getHtmlFromUrl(String url, boolean useHtmlUnit) throws Exception {
        if (!useHtmlUnit) {
            return Jsoup.connect(url)
                    //模拟火狐浏览器
                    .userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)")
                    .get();
        } else {
            WebClient webClient = new WebClient(BrowserVersion.CHROME);
            webClient.getOptions().setJavaScriptEnabled(true);
            webClient.getOptions().setCssEnabled(false);
            webClient.getOptions().setActiveXNative(false);
            webClient.getOptions().setCssEnabled(false);
            webClient.getOptions().setThrowExceptionOnScriptError(false);
            webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
            webClient.getOptions().setTimeout(10000);
            HtmlPage htmlPage = null;
            try {
                htmlPage = webClient.getPage(url);
                webClient.waitForBackgroundJavaScript(10000);
                String htmlString = htmlPage.asXml();
                return Jsoup.parse(htmlString);
            } finally {
                webClient.close();
            }
        }
    }

}

  之后就是爬虫;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.WebConsole.Logger;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Date;
import java.util.HashSet;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.slf4j.LoggerFactory;

public class SohuNewsPuller implements NewsPuller  {
    public static void main(String []args) {
    	System.out.println("123");
    	SohuNewsPuller ss=new SohuNewsPuller();
    	ss.pullNews();
    }
    private String url="http://news.sohu.com/";
    public void pullNews() {
        Document html= null;
        try {
            html = getHtmlFromUrl(url, false);
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }
        // 2.jsoup获取新闻<a>标签
        Elements newsATags = html.select("div.focus-news")
                .select("div.list16")
                .select("li")
                .select("a");

        for (Element a : newsATags) {
            String url = a.attr("href");
            System.out.println("内容"+a.text());
            Document newsHtml = null;
            try {
                newsHtml = getHtmlFromUrl(url, false);
                Element newsContent = newsHtml.select("div#article-container")
                        .select("div.main")
                        .select("div.text")
                        .first();
                String title1 = newsContent.select("div.text-title").select("h1").text();
                String content = newsContent.select("article.article").first().text();
                System.out.println("url"+"\n"+title1+"\n"+content);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

  结果:

当然还没有清洗内容,后续会清洗以及爬取动态网站啥的。

参考博客:https://blog.csdn.net/gx304419380/article/details/80619043#commentsedit

代码已上传github:https://github.com/mmmjh/GetSouhuNews

欢迎吐槽!!!!

绝大部分代码是参考的人家的博客。我只是把项目还原了。

原文地址:https://www.cnblogs.com/mm20/p/11328941.html

时间: 2024-10-09 00:35:43

Jsoup+HttpUnit爬取搜狐新闻的相关文章

爬取搜狐网有关篮球的网站

方式一:正则 import requests import re contents = requests.get('http://www.sohu.com') links = re.findall('href="(.*?)"', contents.text) vaild_link = [] for i in links: if 'sohu' not in i: continue elif re.search('\.jpg|\.pdf|\.css|\.ico|\.tif|\.gif|ma

Android 模仿搜狐新闻的ViewpagerIndicator

好久没写博客了,今天没事怒更一记. 如标题今天我们来模仿一下搜狐新闻,先上个效果图. 效果图上完之后再上个博客,我也是从这里得到的启发http://blog.csdn.net/qibin0506/article/details/42046559 1,接下来我们就来分析一下这个效果 下面的内容应该是用viewpager,头部的选项卡我们用一个LinearLayout+HorizontalScrollView也可以实现,滚动效果的话我们可以用到我们学会的scrollTo,大致的思路理清,我们就开始码

利用朴素贝叶斯分类算法对搜狐新闻进行分类(python)

数据来源  https://www.sogou.com/labs/resource/cs.php介绍:来自搜狐新闻2012年6月-7月期间国内,国际,体育,社会,娱乐等18个频道的新闻数据,提供URL和正文信息格式说明:<doc><url>页面URL</url><docno>页面ID</docno><contenttitle>页面标题</contenttitle><content>页面内容</conten

48岁单身女与60条流浪狗为伴续:多人向其示爱-搜狐新闻

48岁单身女与60条流浪狗为伴续:多人向其示爱-搜狐新闻 来源:搜狐网 更新时间:2015-04-14 06:43:05 分类:新闻 关键词:流浪狗,示爱 收到示爱电话,王国英既感动又有些哭笑不得.南都记者 陈坤荣 摄 "珠海48岁单身女与60条流浪狗'为伍"追踪 南都讯 记者杨亮 珠海48岁"狗妈妈"王国英放弃记者的工作,不结婚,不生小孩,十余年与60多条流浪狗为伴的动人故事9日经南都披露后引发广泛关注.全国各地不少人士近日纷纷打电话.发短信大胆示爱,让王国英感到

本溪市委书记冮瑞任辽宁省副省长(图)-搜狐新闻

本溪市委书记?瑞任辽宁省副省长(图)-搜狐新闻 来源:搜狐网 更新时间:2015-04-14 08:38:14 分类:新闻 关键词:副省长,市委 ?瑞,男,汉族,1958年5月生,辽宁彰武人,在职研究生学历.1980年2月参加工作,1984年10月入党. 1986.11 先后担任辽宁省商业厅计划业务处副处长.处长和省贸易厅市场处处长等职务 1995.12 辽宁省经贸委副主任.党组成员 2002.12 辽宁省经贸委副主任.党组成员,省口岸办主任(正厅级) 2005.05 辽宁省经委副主任.党组副书

搜狐自媒体成搜狐新闻客户端战略核心

在移动互联网市场,四大门户都将移动新闻客户端最为战略高地之一,尤其是搜狐,已将新闻APP的发展视为移动战略核心.相比其他新闻APP,搜狐新闻客户端的最突出亮点则在于活络的搜狐自媒体战略. 纵观目前国内主流的新闻客户端产品,搜狐最为重视自媒体团队建设,尤其是在今年3月成立的国内首个美食自媒体联盟,张朝阳亲自为其助阵显示其对新闻客户端的重要性,随后有关搜狐吃货自媒体联盟的运转成为了业界关注的话题. 可能很多人有疑惑,为什么搜狐要先搞一个"吃货自媒体联盟",此前我曾在<搜狐新闻客户端为

Python 爬取广州商学院新闻----测试版

Python 爬取广州商学院新闻----测试版 程序简述:抓取广州商学院新闻栏目的全部新闻内容 开发环境:PyCharm Community Edition 爬取连接:http://news.gzcc.cn/ 作者:siberia 详细内容:http://easyboy1.blog.163.com/blog/static/2641120382017103105416810/ 详细内容:http://easyboy1.blog.163.com/blog/static/264112038201710

搜狐新闻APP是如何使用HUAWEI DevEco IDE快速集成HUAWEI HiAI Engine

6月12日,搜狐新闻APP最新版本在华为应用市场正式上线啦! 那么,这一版本的搜狐新闻APP有什么亮点呢? 先抛个图,来直接感受下-- ? 模糊图片,瞬间清晰! 效果杠杠的吧. 而藏在这项神操作背后的幕后操手, 竟然是HUAWEI HiAI Engine的图像超分辨率能力. 通过HUAWEI HiAI的图像超分能力处理的照片, 会更清晰,更锐利! 再看下图-- 就是这么任性~ 除此之外,HUAWEI HiAI Engine还提供了人脸识别. 图片识别.码识别.文本识别. 自然语音处理.自动语音识

利用搜狐新闻语料库训练100维的word2vec——使用python中的gensim模块

语料数据来自搜狐新闻2012年6月-7月期间国内,国际,体育,社会,娱乐等18个频道的新闻数据 数据处理参考这篇文章 模型训练: # -*- coding: utf-8-*- from gensim.models.word2vec import Word2Vec sentences = [['A1','A2'],['A1','A3','A2']] num=0 with open('sohu_train.txt') as trainText: #, encoding='utf-8' for lin