Jsoup实现网络数据抓取2
来源:互联网 发布:php static 编辑:程序博客网 时间:2024/06/05 09:59
使用Jsoup工具解析数据,Jsoup采用的DOM进行解析数据的,总体是比较简单,根据各个元素的attr,class以及继承关系,就可以访问到需要的数据。
代码如下:
(1)SecondActivity代码
public class SecondActivity extends Activity{ List<DataHolder> dataHolders = new ArrayList<>(); ListView listView; Adapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_activity); init(); } private void init() { Intent intent = getIntent(); String date = intent.getStringExtra("extra_date"); try { new AsynLoad().execute(new URL("http://rili.jin10.com/" + date)); } catch (MalformedURLException e) { e.printStackTrace(); } Log.d("de" , dataHolders.toString()); } class AsynLoad extends AsyncTask<URL , Void , String> { @Override protected String doInBackground(URL... urls) { StringBuilder sb = new StringBuilder(); try { URL url = urls[0]; HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5 * 1000); conn.setRequestMethod("GET"); conn.setRequestProperty( "Accept", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, " + "application/x-shockwave-flash, application/xaml+xml, " + "application/vnd.ms-xpsdocument, application/x-ms-xbap, " + "application/x-ms-application, application/vnd.ms-excel, " + "application/vnd.ms-powerpoint, application/msword, */*"); conn.setRequestProperty("Accept-Language", "zh-CN"); conn.setRequestProperty("Charset", "UTF-8"); conn.setRequestProperty("Connection", "Keep-Alive"); InputStream is = conn.getInputStream(); int len = 0; byte[] buf = new byte[1024]; while ((len = is.read(buf)) > 0) { sb.append(new String(buf , 0 , len , "UTF-8")); } is.close(); } catch (Exception e) { e.printStackTrace(); } return sb.toString(); } @Override protected void onPostExecute(String result) { Document doc = Jsoup.parse(result); Element importantTime = null; Elements td_rowspan = doc.getElementsByAttribute("rowspan"); for (int i = 0 ; i < td_rowspan.size() ; i++) { if (td_rowspan.get(i).text().equals("22:30") || td_rowspan.get(i).text().equals("23:30")) { importantTime = td_rowspan.get(i); } } if (importantTime != null) { Element parent = importantTime.parent(); DataHolder dataHolder1 = new DataHolder(); dataHolder1.setName(parent.child(2).text()); dataHolder1.setLastData(parent.child(4).text()); dataHolder1.setPreData(parent.child(5).text()); dataHolder1.setPostData(parent.child(6).child(0).text()); dataHolder1.setInfluent(parent.child(7).child(0).child(0).text() + " " + parent.child(7).child(0).child(1).text()); dataHolders.add(dataHolder1); Element currentElement = parent.nextElementSibling(); int count = 0; while (currentElement != null) { if (count == 0 || count >3) { count++; currentElement = currentElement.nextElementSibling(); } else { DataHolder dataHolder = new DataHolder(); dataHolder.setName(currentElement.child(0).text()); dataHolder.setLastData(currentElement.child(2).text()); dataHolder.setPreData(currentElement.child(3).text()); dataHolder.setPostData(currentElement.child(4).child(0).text()); dataHolder.setInfluent(currentElement.child(5).child(0).child(0).text() + " " + currentElement.child(5).child(0).child(1).text()); dataHolders.add(dataHolder); currentElement = currentElement.nextElementSibling(); count++; } } listView = (ListView) findViewById(R.id.id_list); adapter = new Adapter(SecondActivity.this , dataHolders); listView.setAdapter(adapter); } } }}
(2)Bean类:
public class DataHolder{ private String name; private String lastData; private String preData; private String postData; private String influent; public DataHolder() { } public DataHolder(String name , String lastData , String preData , String postData , String influent) { this.name = name; this.lastData = lastData; this.preData = preData; this.postData = postData; this.influent = influent; } public String getName() { return name; } public String getPreData() { return preData; } public String getLastData() { return lastData; } public String getPostData() { return postData; } public String getInfluent() { return influent; } public void setName(String name) { this.name = name; } public void setLastData(String lastData) { this.lastData = lastData; } public void setPreData(String preData) { this.preData = preData; } public void setPostData(String postData) { this.postData = postData; } public void setInfluent(String influent) { this.influent = influent; }}
(3)Adapter类:
public class Adapter extends BaseAdapter{ private List<DataHolder> datas; private LayoutInflater inflater; public Adapter(Context context , List<DataHolder> myDatas) { inflater = LayoutInflater.from(context); datas = myDatas; } @Override public int getCount() { return datas.size(); } @Override public Object getItem(int position) { return datas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.list_item2 , null); viewHolder = new ViewHolder(); viewHolder.name = (TextView) convertView.findViewById(R.id.name); viewHolder.lastData = (TextView) convertView.findViewById(R.id.last_data); viewHolder.preData = (TextView) convertView.findViewById(R.id.pre_data); viewHolder.postData = (TextView) convertView.findViewById(R.id.post_data); viewHolder.influent = (TextView) convertView.findViewById(R.id.info_data); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.name.setText(datas.get(position).getName()); viewHolder.lastData.setText("前值:" + datas.get(position).getLastData()); viewHolder.preData.setText("预测值:" + datas.get(position).getPreData()); viewHolder.postData.setText("公布值:" + datas.get(position).getPostData()); viewHolder.influent.setText(datas.get(position).getInfluent()); if (datas.get(position).getInfluent().equals("利空 金银")) { viewHolder.influent.setTextColor(Color.GREEN); viewHolder.influent.setBackgroundResource(R.drawable.text_style); } else { viewHolder.influent.setTextColor(Color.RED); viewHolder.influent.setBackgroundResource(R.drawable.text_style2); } return convertView; } class ViewHolder { TextView name; TextView lastData; TextView preData; TextView postData; TextView influent; }}
主页面布局比较简单,这里只贴出item的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="60dp"> <TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="3dp" android:layout_marginTop="5dp" android:layout_marginBottom="5dp" android:textSize="15sp" android:text=""/> <LinearLayout android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="wrap_content" android:layout_marginTop="1dp" android:layout_marginLeft="5dp" android:layout_below="@+id/name"> <TextView android:id="@+id/last_data" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="" android:textSize="12sp"/> <TextView android:id="@+id/pre_data" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="" android:textSize="12sp"/> <TextView android:id="@+id/post_data" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginLeft="5dp" android:text="" android:textSize="12sp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:text="@string/info" android:textSize="12sp"/> <TextView android:id="@+id/info_data" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:layout_weight="1" android:layout_marginLeft="3dp" android:layout_marginRight="3dp" android:text="" android:textColor="@android:color/holo_green_dark" android:background="@drawable/text_style" android:textSize="12sp"/> </LinearLayout></RelativeLayout>
0 0
- Jsoup实现网络数据抓取2
- Jsoup实现网络数据抓取1
- Jsoup实现网络爬虫抓取数据
- 利用Jsoup抓取网络数据
- Jsoup数据抓取
- 使用Jsoup抓取数据
- jsoup数据抓取学习
- Jsoup抓取数据
- Jsoup抓取数据
- httpclient+jsoup抓取数据
- jsoup 抓取网页数据
- 利用HttpClient和Jsoup实现从网站中抓取数据
- HttpClient+jsoup实现网页数据抓取和处理
- Jsoup 网络抓取jar包
- JAVA jsoup网络抓取图片
- Jsoup 爬虫 抓取网络图片
- Jsoup学习-使用Jsoup抓取页面数据
- Java抓取网页数据-----Jsoup
- phpexcel设置单元格为文本格式,防止excel的单元格会直接把前面的零去掉了
- Using Spring Boot without the parent POM
- Linux svn服务端配置
- RxJava 2.0来啦!
- openwrt 问题二 js 通过nginx 服务器调用 lua代码的过程实现
- Jsoup实现网络数据抓取2
- Spring中属性文件properties的读取与使用
- Android(JAVA)线程池ThreadPoolExecutor
- 实时显示
- 迭代器和解析
- 数据库学习计划
- 面试题1
- Friday the Thirteenth(USACO)
- 数组合并