换了好几种爬取文章标题的方式都不太满意,雪球网head标签里的title内容非常混乱,看起来完全不像一个文章的标题。我决定尊重客观事实,如果一个作者没有拟标题的话就直接:

if (fetch.title == "") fetch.title = "无标题";

得到结果:

东方财富的python接口_爬虫


由于帖子一直在更新,过段时间再爬可以得到更多结果。

下面是东方财富官网的爬取过程:

var source_name = "东方财富网";
var myEncoding = "utf-8";
var seedURL = 'https://www.eastmoney.com/';
var url_reg = /\/(\w{1})\/(\d{18}).html/;
var seedURL_format = "$('a')";
request(seedURL, function(err, res, body) { //读取种子页面
    // try {
    //用iconv转换编码
    var html = myIconv.decode(body, myEncoding);
    //console.log(html);
    //准备用cheerio解析html
    var $ = myCheerio.load(html, { decodeEntities: true });
    // } catch (e) { console.log('读种子页面并转码出错:' + e) };

    var seedurl_news;

    try {
        seedurl_news = eval(seedURL_format);
        //console.log(seedurl_news);
    } catch (e) { console.log('url列表所处的html块识别出错:' + e) };

    seedurl_news.each(function(i, e) { //遍历种子页面里所有的a链接
        var myURL = "";
        try {
            //得到具体新闻url
            var href = "";
            href = $(e).attr("href");
            if (typeof(href) == "undefined") {  // 有些网页地址undefined
                return true;
            }
            if (href.toLowerCase().indexOf('http://') >= 0 || href.toLowerCase().indexOf('https://') >= 0) myURL = href; //http://开头的或者https://开头
            else if (href.startsWith('//')) myURL = 'http:' + href; 开头的
            else myURL = seedURL.substr(0, seedURL.lastIndexOf('/')) + href; //其他

        } catch (e) { console.log('识别种子页面中的新闻链接出错:' + e) }

        if (!url_reg.test(myURL)) return; //检验是否符合新闻url的正则表达式
        console.log(myURL);
        //newsGet(myURL); //读取新闻页面
    });
});

先不读取新闻页面,在命令行输出链接。访问没有问题可以进入下一个步骤:

东方财富的python接口_爬虫_02


爬取标题:

fetch.title = $('div[class="newsContent"]').children("h1").text();
if (fetch.title == "") fetch.title = "无标题";

东方财富的python接口_爬虫_03


爬取内容:

fetch.content = $('div[id="ContentBody"]').children("p").text();

东方财富的python接口_正则表达式_04

代码写好了突然又不行了。。这个错好像不用管,会不会出bug完全靠运气???不过晚上10-11点出现比较多(貌似)

东方财富的python接口_东方财富的python接口_05


有时间再来跑一下,东方财富网也爬得差不多了

------------------------------分界线-4月18日晚-----------------------------------

得到东方财富网的爬取内容:

东方财富的python接口_东方财富的python接口_06


用同样的方式爬取中国金融网的新闻信息

var source_name = "中国金融网";
var myEncoding = "utf-8";
var seedURL = 'http://www.financeun.com/';
var url_reg = /\/newsDetail\/(\d{5}).shtml/;
var seedURL_format = "$('a')";
var fetch = {};
fetch.title = $('div[class="news-details-data"]').children("h2").text();
if (fetch.title == "") fetch.title = "无标题";
fetch.content = $('div[class="txt"]').text();
fetch.publish_date = $('div[class="news-details-data"]').children("h3").text().split(" ")[2]; //+ $('div[class="news-details-data"]').children("h3").text().split(" ")[3];
fetch.url = myURL;
fetch.source_name = $('div[class="news-details-data"]').children("h3").text().split(" ")[1];
fetch.source_encoding = myEncoding; //编码
fetch.crawltime = new Date();
fetch.keywords = $('meta[name="keywords"]').attr("content");
fetch.author = "未知";
fetch.description = $('meta[name="description"]').attr("content");

中国金融网真的很神奇,,输出都是undefined,新闻链接竟然无法访问…然后也无法点击进入网页(怀疑我是不是测试太多次被制裁了嘤嘤嘤,最开始可以访问的)

东方财富的python接口_东方财富的python接口_07


换个网站…

试了试知乎,它要登陆…

东方财富的python接口_node.js_08


尝试添加cookie之后:

东方财富的python接口_html_09


--------------------------分界线 4月19日早上-------------------------------------

不死心又试了中国金融网,ip又被封了。。。

而且啥也没爬到

东方财富的python接口_正则表达式_10


爬到了一些,但是标题还是没有…

东方财富的python接口_html_11


小白财经网:http://www.xiaobaicj.cn/

可以正常爬取,不过它的网页的meta里没有自带关键字和摘要

var source_name = "小白财经";
var myEncoding = "utf-8";
var seedURL = 'http://www.xiaobaicj.cn/';
var url_reg = /\/(\w{1})(\d{5}).html/;
var seedURL_format = "$('a')";
fetch.title = $('h1[class="entry-title"]').text();
if (fetch.title == "") fetch.title = "无标题";
fetch.content = $('div[class="entry-content"]').text();
fetch.publish_date = $('span[class="entry-date"]').text();
fetch.url = myURL;
fetch.source_name = source_name;
fetch.source_encoding = myEncoding; //编码
fetch.crawltime = new Date();
fetch.keywords = $('meta[name="keywords"]').attr("content");
if(fetch.keywords == "") fetch.keywords = "未知";
fetch.author = $('span[class="entry-author"]').text();
if(fetch.author == "") fetch.author = "未知";
fetch.description = $('meta[name="description"]').attr("content");
if(fetch.description == "") fetch.description = "未知";

东方财富的python接口_node.js_12


那么数据的准备到这里就告一段落啦~接下来着手开始网站的搭建