要爬取的凤凰财经网址:http://app.finance.ifeng.com/list/stock.php?t=hs

本作主要采用的技术是jsoup,相关介绍网页:https://www.jianshu.com/p/69b395bee43a

其官网:https://jsoup.org/

爬取程序:

package com.ufo.hy.agumaster.tool;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; import com.ufo.hy.agumaster.entity.Stock; /**
* Crawl stock code/name from FengHuang finance website:http://app.finance.ifeng.com/list/stock.php?t=hs
* Main package:jsoup
* Dependency:
* <dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.3</version>
</dependency>
* @author heyang
*
*/
public class FenghuangCrawler {
private static final String SRC_URL="http://app.finance.ifeng.com/list/stock.php?t=hs";
private static final String ENCODING = "utf-8"; // Used to save stock code names
private List<Stock> stockList; public FenghuangCrawler() {
stockList=new ArrayList<Stock>();
String url=SRC_URL; int idx=0;
while(true) {
System.out.println(url); String html = getUrlHtml(url,ENCODING);
Document doc = Jsoup.parse(html,ENCODING); // Find core node
Element divtab01 = doc.getElementsByClass("tab01").last(); // Find stocks
Elements trs=divtab01.getElementsByTag("tr");
for(Element tr:trs) {
Elements tds=tr.getElementsByTag("td");
if(tds.size()>2) {
Element codeElm=tds.get(0).getElementsByTag("a").last();
Element nameElm=tds.get(1).getElementsByTag("a").last(); Stock s=new Stock(idx++,codeElm.text(),nameElm.text());
stockList.add(s);
}
} // Find next page url
Element lastLink=divtab01.getElementsByTag("a").last();
if(lastLink.text().equals("下一页")) {
url="http://app.finance.ifeng.com/list/stock.php"+lastLink.attr("href");
}else {
break;
}
} for(Stock s:stockList) {
System.out.println(s);
}
System.out.println("共找到"+idx+"个股票.");
} private String getUrlHtml(String url, String encoding) {
StringBuffer sb = new StringBuffer();
URL urlObj = null;
URLConnection openConnection = null;
InputStreamReader isr = null;
BufferedReader br = null;
try {
urlObj = new URL(url);
openConnection = urlObj.openConnection();
isr = new InputStreamReader(openConnection.getInputStream(), encoding);
br = new BufferedReader(isr);
String temp = null;
while ((temp = br.readLine()) != null) {
sb.append(temp + "\n");
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (isr != null) {
isr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
} public List<Stock> getStockList() {
return stockList;
} public static void main(String[] args) {
// 根据需要设置代理
System.setProperty("http.proxyHost", "");
System.setProperty("http.proxyPort", ""); new FenghuangCrawler();
}
}

运行结果节选:

...
Stock id:3743 code:002752 name:昇兴股份
Stock id:3744 code:000796 name:凯撒旅业
Stock id:3745 code:603233 name:大参林
Stock id:3746 code:000048 name:京基智农
Stock id:3747 code:300463 name:迈克生物
Stock id:3748 code:300485 name:赛升药业
Stock id:3749 code:603387 name:基蛋生物
Stock id:3750 code:002469 name:三维工程
Stock id:3751 code:600052 name:浙江广厦
Stock id:3752 code:002187 name:广百股份
Stock id:3753 code:300069 name:金利华电
Stock id:3754 code:300317 name:珈伟新能
Stock id:3755 code:002637 name:赞宇科技
Stock id:3756 code:001914 name:招商积余
Stock id:3757 code:000564 name:供销大集
Stock id:3758 code:002363 name:隆基机械
Stock id:3759 code:603709 name:中源家居
Stock id:3760 code:000802 name:北京文化
Stock id:3761 code:002127 name:南极电商
Stock id:3762 code:600107 name:美尔雅
Stock id:3763 code:002678 name:珠江钢琴
Stock id:3764 code:002083 name:孚日股份
Stock id:3765 code:300325 name:德威新材
共找到3766个股票.

这是2020年5月1日的数据。

参考资料:

https://www.jianshu.com/p/3430f4d0b384
https://blog.csdn.net/qq_28940573/article/details/99295276

--2020-04-30--

用Java爬虫爬取凤凰财经提供的沪深A股所有股票代号名称的更多相关文章

  1. 一个简单java爬虫爬取网页中邮箱并保存

    此代码为一十分简单网络爬虫,仅供娱乐之用. java代码如下: package tool; import java.io.BufferedReader; import java.io.File; im ...

  2. Java爬虫爬取网站电影下载链接

    之前有看过一段时间爬虫,了解了爬虫的原理,以及一些实现的方法,本项目完成于半年前,一直放在那里,现在和大家分享出来. 网络爬虫简单的原理就是把程序想象成为一个小虫子,一旦进去了一个大门,这个小虫子就像 ...

  3. java爬虫爬取的html内容中空格(&nbsp;)变为问号“?”的解决方法

    用java编写的爬虫,使用xpath爬取内容后,发现网页源码中的 全部显示为?(问号),但是使用字符串的replace("?", ""),并不能替换,网上找了一 ...

  4. java爬虫爬取网页内容前,对网页内容的编码格式进行判断的方式

    近日在做爬虫功能,爬取网页内容,然后对内容进行语义分析,最后对网页打标签,从而判断访问该网页的用户的属性. 在爬取内容时,遇到乱码问题.故需对网页内容编码格式做判断,方式大体分为三种:一.从heade ...

  5. java爬虫爬取资源,小白必须会的入门代码块

    java作为目前最火的语言之一,他的实用性也在被无数的java语言爱好者逐渐的开发,目前比较流行的爬取资源,用java来做也更简单一些,下面是爬取网页上所有手机型号,参数等极为简便的数据 packag ...

  6. java爬虫爬取https协议的网站时,SSL报错, java.lang.IllegalArgumentException TSLv1.2 报错

    目前在广州一家小公司实习,这里的学习环境还是挺好的,今天公司从业十几年的大佬让我检查一下几年前的爬虫程序是否还能使用…… 我从myeclipse上check out了大佬的程序,放到workspace ...

  7. Java爬虫爬取京东商品信息

    以下内容转载于<https://www.cnblogs.com/zhuangbiing/p/9194994.html>,在此仅供学习借鉴只用. Maven地址 <dependency ...

  8. 使用Python爬虫爬取网络美女图片

    代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...

  9. 通过爬虫爬取四川省公共资源交易平台上最近的招标信息 --- URLConnection

    通过爬虫爬取公共资源交易平台(四川省)最近的招标信息 一:引入JSON的相关的依赖 <dependency>       <groupId>net.sf.json-lib< ...

随机推荐

  1. JAVA多线程之生产者 消费者模式 妈妈做面包案例

    创建四个类 1.面包类 锅里只可以放10个面包 ---装面包的容器2.厨房 kitchen 生产面包 和消费面包  最多生产100个面包3.生产者4消费者5.测试类 多线程经典案例 import ja ...

  2. FTP服务器搭建及自动备份设置

    本次随笔内容主要是FTP服务器搭建. 其实去年十月服务器就搭建完了.当时写了个PPT保存了一下,准备以后写博客,结果时隔快一年我自己都快要看不懂我自己写的PPT了  ( = o = ) 不过还是尽量尝 ...

  3. Elasticsearch第一篇:在 Windows 上的环境搭建

    本文介绍如何在 windows 10 ,64位操作系统上安装最新版本 Elasticsearch.以及相关插件.之前看了不少园友的文章,用到的版本都比较低,尤其是插件的版本要和ES的版本相对应等这些问 ...

  4. java 判断集合元素唯一的原理

    一 ArrayList的contains方法判断元素是否重复原理 ArrayList的contains方法会使用调用方法时,传入的元素的equals方法依次与集合中的旧元素 所比较,从而根据返回的布尔 ...

  5. C#LeetCode刷题之#34-在排序数组中查找元素的第一个和最后一个位置(Find First and Last Position of Element in Sorted Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4970 访问. 给定一个按照升序排列的整数数组 nums,和一个目 ...

  6. JavaScript async/await 基础知识

    async 作用: async函数返回一个 Promise对象,无论内部有没有await关键字. await 作用: await等待的是一个表达式,这个表达式的计算结果是 Promise 对象 或者是 ...

  7. java面试的一些问题

    面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...

  8. markdown基础使用技巧

    markdown基础使用技巧 通过``创建代码形式,不同形式可以叠加(比如:斜体+加粗) 块级元素 通过return/Enter实现切换段落/创建段落 通过shift+return/enter 实现换 ...

  9. 技术分享丨数据仓库的建模与ETL实践技巧

    摘要:如何搭建数据仓库,在这个过程中都应该遵循哪些方法和原则,项目实践中有哪些技巧. 一.数据仓库的“心脏” 首先来谈谈数据模型.模型是现实世界特征的模拟和抽象,比如地图.建筑设计沙盘,飞机模型等等. ...

  10. tar.gz文件的压缩与解压

    1 解压".xz" xz -d your_file_name.tar.xz 注:运行上述命令后your_file_name.tar.xz会被删除 2 解包".tar&qu ...