首页
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
Search
1
职教云小助手重构更新,职教云助手最新版下载地址【已和谐】
14,232 阅读
2
职教云-智慧职教,网课观看分析(秒刷网课)
11,468 阅读
3
gradle-5.4.1-all.zip下载
9,507 阅读
4
职教云-智慧职教,签到补签分析(逆天改命系列)
8,203 阅读
5
一个优秀的程序员从写文档开始:免费领14个月语雀云笔记会员
7,017 阅读
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
登录
/
注册
Search
Lan
累计撰写
617
篇文章
累计收到
629
条评论
首页
栏目
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
页面
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
搜索到
452
篇与
的结果
2020-12-30
使用pycharm建Django项目,tools工具栏无Run manage.py task
使用pycharm建的Django项目,使用一段时间,然后发现模板文件中的static路径无法识别了。然后Tools栏目里面也没有run manage.py task猜想可能和安卓studio无法识别安卓项目一样,pycharm没将此项目当做Django了,于是百度后。打开Files->settings->Language&Frameworks->Django进行相关设置。保存之后即可。
2020年12月30日
645 阅读
0 评论
0 点赞
2020-12-19
Week5 情话网小爬虫
太久没写爬虫了,手生到连xpath怎么提取出来都忘记了,requests取回的数据编码都忘记怎么转换了于是乎在百度上随便搜了一个情话网,来进行爬取。目标地址:https://www.qinghuawang.net/一如既往的习惯,打开网站后F12,看是不是ajax请求也是,看着就很老的一个网站怎么会用ajax呢,想多了。于是就用原始的Xpath咯。打开浏览器里面的xpath helper按住shift键,去选择文章标题这样就获取到了一条标题的内容,然后就是稍微修改修改xpath,从原始的/html/body[@class='listBody']/div[@class='bodyMain']/div[@class='bodyMainBody']/div[@class='infoList']/ul[@class='infoListUL mt5']/li[1]/a[@class='articleTitle fl']修改一下//li/a[@class='articleTitle fl']就可以取到所有的标题了。但是这样取出来的数据并不是纯文本,他还包含了一些html标签,于是乎在后面加上一个/text()//li/a[@class='articleTitle fl']/text()这样就可以获取到一页中的标题了用python随便写一下试试。发现取出来之后是乱码,那就肯定是编码问题了,打开F12,查看html中的head,发现是gb2312提笔忘字之,怎么转换编码来着,百度了一下。res = requests.get(url).content res = res.decode("gb2312")以前怎么写的忘记了,但应该不是这么麻烦的。然后是这样的获取了一页的标题后,然后再获取详情页的链接,因为是a标签,所以只需要在xpath后面加一句/@href就可以获取到这个属性了//li/a[@class='articleTitle fl']/@href还得进入里面去获取文章内容咯,于是随便点进去看一下,详情页地址:https://www.qinghuawang.net/a/1808.htmlxpath发现,都是包含在p标签内于是只要把/p后面的[1]去掉就可以获取到所有的段落咯,再加上一个text()就可以获取到文本了。然后放到python里面试一下。然后又报错了,大概意思是gb2312无法解析0xfd于是百度了一下,解决之后。然后就是将这些话保存至txt咯。最后加几个For循环去爬取所有的内容咯最后整理代码如下,没进行清洗了,就开了个多线程:# -*- coding: utf-8 -*- """ ------------------------------------------------- @ Author :Lan @ Blog :www.lanol.cn @ Date : 2020/12/19 @ Description:I'm in charge of my Code ------------------------------------------------- """ import parsel import requests import threading def getContet(urls): for i in urls: url = 'https://www.qinghuawang.net/' + i res = requests.get(url).content res = res.decode("gb2312", errors='ignore') xpath = parsel.Selector(res) content = xpath.xpath("//p/text()").extract() with open('sentence.txt', 'a+', encoding='utf8') as f: for j in content: f.write(j + " ") print(j) def getAll(): for i in range(1, 20): url = f'https://www.qinghuawang.net/qinghua/list_1_{i}.html' res = requests.get(url).content xpath = parsel.Selector(res.decode('gb2312')) urlList = xpath.xpath("//li/a[@class='articleTitle fl']/@href").extract() threading.Thread(target=getContet, args=(urlList,)).start() if __name__ == '__main__': getAll()废了,废了
2020年12月19日
719 阅读
0 评论
0 点赞
2020-11-24
Android为属性组件动画无效
本来我的代码是这样的然后发现这动画只能在窗体onCreate的时候使用有效。放在点击事件之类的就不行了。后经百度发现需要开始动画而不是设置动画carImg.startAnimation(animation);
2020年11月24日
640 阅读
0 评论
0 点赞
2020-11-18
JavaScript调用Android方法,显示Echarts
开个坑,以后写
2020年11月18日
720 阅读
3 评论
0 点赞
2020-10-30
安卓实时获取数据并刷新图表
先来个效果图吧然后直接上代码,解说以后有机会我再补上assets>index.html<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <script src="./js/echarts.min.js"></script> <title>Document</title> </head> <body> <div id="main" style="width: 400px;height:400px;"></div> <script type="text/javascript" src="./js/echarts.min.js"></script> <script> var myChart = echarts.init(document.getElementById('main')); function updateData(jsonstr) { var shuju = JSON.parse(jsonstr); option = { xAxis: { type: 'category', data: shuju.data, }, yAxis: { type: 'value' }, series: [{ data: shuju.wendu, type: 'line' }] }; myChart.setOption(option); } </script> </body> </html>Mainactivity.javapackage cn.lanol.wendu; import androidx.annotation.NonNull; import androidx.annotation.UiThread; import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.webkit.JavascriptInterface; import android.webkit.WebView; import android.widget.Button; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import java.io.IOException; import java.sql.Time; import java.util.Timer; import java.util.TimerTask; import cn.lanol.wendu.Helper.GetContext; import cn.lanol.wendu.Helper.SQLiteDBhelper; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class MainActivity extends AppCompatActivity { private SQLiteDBhelper dBhelper = new SQLiteDBhelper(GetContext.getContext(), "DATA", null, 1); private SQLiteDatabase db = dBhelper.getReadableDatabase(); private WebView webView; private Handler handler; @SuppressLint({"SetJavaScriptEnabled", "HandlerLeak"}) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化数据库 new Thread(new Runnable() { @Override public void run() { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { getWenDuData(); Message msg = new Message(); msg.what = 1; handler.sendMessage(msg); } }, 0, 60000); } }).start(); webView = findViewById(R.id.echartsView); webView.getSettings().setAllowFileAccess(true); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("file:///android_asset/index.html"); handler = new Handler() { @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); Log.d("标签", "handleMessage: " + msg.what); webView.loadUrl("javascript:updateData('" + getNewData() + "')"); } }; try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } public String getNewData() { dBhelper.getWritableDatabase(); String wenduJson = "["; String timeJson = "["; Cursor a = db.query("WenDu", null, null, null, null, null, "ID desc", "5"); if (a.moveToFirst()) { do { String time = a.getString(a.getColumnIndex("time")); String wendu = a.getString(a.getColumnIndex("wendu")); wenduJson += """ + wendu + "","; timeJson += """ + time + "","; } while (a.moveToNext()); } timeJson = timeJson.substring(0, timeJson.length() - 1) + ']'; wenduJson = wenduJson.substring(0, wenduJson.length() - 1) + ']'; String result = "{"data":" + timeJson + ","wendu":" + wenduJson + "}"; return result; } public void getWenDuData() { OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder().url("https://api.565.ink/json").get().build(); try { Response response = okHttpClient.newCall(request).execute(); String res = response.body().string(); JsonObject a = JsonParser.parseString(res).getAsJsonObject(); String time = a.get("time").getAsString(); String wendu = a.get("wendu").getAsString(); Cursor cursor = db.query("WenDu", null, "time like '%" + time + "%'", null, null, null, null); if (cursor.moveToFirst()) { Log.d("已存在", time); } else { ContentValues values = new ContentValues(); values.put("time", time); values.put("wendu", wendu); db.insert("WenDu", null, values); Log.d("不存在", time); } Log.d("结果", time + "," + wendu); } catch (IOException e) { e.printStackTrace(); } } }activity_main.xml<?xml version="1.0" encoding="utf-8"?> <androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" tools:ignore="WebViewLayout"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="温度" /> <WebView android:id="@+id/echartsView" android:layout_width="match_parent" android:layout_height="400dp" /> </LinearLayout> <com.google.android.material.navigation.NavigationView android:id="@+id/navigationView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" /> </androidx.drawerlayout.widget.DrawerLayout>AndroidMainifest.xml<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="cn.lanol.wendu"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" android:name=".Helper.GetContext" tools:ignore="GoogleAppIndexingWarning"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>SQLiteDBHelper.javapackage cn.lanol.wendu.Helper; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.widget.Toast; import androidx.annotation.Nullable; public class SQLiteDBhelper extends SQLiteOpenHelper { private Context mcontext; private static final String CREATE_WENDU = "create table WenDu(id integer primary key autoincrement,time text,wendu integer)"; public SQLiteDBhelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); mcontext = context; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_WENDU); Toast.makeText(GetContext.getContext(), "欢迎使用温度实时监控系统", Toast.LENGTH_SHORT).show(); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }GetContext.javapackage cn.lanol.wendu.Helper; import android.app.Application; import android.content.Context; public class GetContext extends Application { private static Context context; @Override public void onCreate() { super.onCreate(); context = getApplicationContext(); } public static Context getContext() { return context; } }目录结构
2020年10月30日
852 阅读
0 评论
0 点赞
2020-10-25
用Python处理HTML转义字符的5种方式
写爬虫是一个发送请求,提取数据,清洗数据,存储数据的过程。在这个过程中,不同的数据源返回的数据格式各不相同,有 JSON 格式,有 XML 文档,不过大部分还是 HTML 文档,HTML 经常会混杂有转移字符,这些字符我们需要把它转义成真正的字符。什么是转义字符在 HTML 中 <、>、& 等字符有特殊含义(<,> 用于标签中,& 用于转义),他们不能在 HTML 代码中直接使用,如果要在网页中显示这些符号,就需要使用 HTML 的转义字符串(Escape Sequence),例如 < 的转义字符是 <,浏览器渲染 HTML 页面时,会自动把转移字符串换成真实字符。转义字符(Escape Sequence)由三部分组成:第一部分是一个 & 符号,第二部分是实体(Entity)名字,第三部分是一个分号。 比如,要显示小于号(<),就可以写< 。Python 反转义字符串用 Python 来处理转义字符串有多种方式,而且 py2 和 py3 中处理方式不一样,在 python2 中,反转义串的模块是 HTMLParser。# python2 import HTMLParser >>> HTMLParser().unescape('a=1&b=2') 'a=1&b=2'Python3 把 HTMLParser 模块迁移到 html.parser# python3 >>> from html.parser import HTMLParser >>> HTMLParser().unescape('a=1&b=2') 'a=1&b=2'到 python3.4 之后的版本,在 html 模块新增了 unescape 方法。# python3.4 >>> import html >>> html.unescape('a=1&b=2') 'a=1&b=2'推荐最后一种写法,因为 HTMLParser.unescape 方法在 Python3.4 就已经被废弃掉不推荐使用,意味着之后的版本有可能会被彻底移除。另外,sax 模块也有支持反转义的函数>>> from xml.sax.saxutils import unescape >>> unescape('a=1&b=2') 'a=1&b=2'
2020年10月25日
637 阅读
0 评论
0 点赞
2020-10-22
Gson解析百度实时热榜Json数据
OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder().url("http://top.baidu.com/mobile_v2/buzz/hotspot").build(); try { Response response = okHttpClient.newCall(request).execute(); ArrayList<NewsContent> newss = new ArrayList<>(); JsonObject a = JsonParser.parseString(response.body().string()).getAsJsonObject(); JsonElement result = a.get("result").getAsJsonObject().get("descs"); JsonArray jsonArray = result.getAsJsonArray(); for (JsonElement newContent : jsonArray) { NewsContent newsContent = new Gson().fromJson(newContent.getAsJsonObject().get("content").getAsJsonObject().get("data").getAsJsonArray().get(0).toString(), NewsContent.class); newss.add(newsContent); Log.d("标题", newsContent.getTitle()); } } catch (IOException e) { e.printStackTrace(); }
2020年10月22日
703 阅读
0 评论
0 点赞
1
...
26
27
28
...
65