diff --git a/车辆12分类数据集/第15组/第15组平时作业/爬虫.ipynb b/车辆12分类数据集/第15组/第15组平时作业/爬虫.ipynb new file mode 100644 index 0000000..5708ed1 --- /dev/null +++ b/车辆12分类数据集/第15组/第15组平时作业/爬虫.ipynb @@ -0,0 +1,396 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 网络爬虫文本分析" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import re\n", + "import pandas as pd\n", + "import jieba as jb" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "#要爬取的新闻分类地址国内、国际、军事、航空、科技\n", + "url_list={'国内':[ 'https://temp.163.com/special/00804KVA/cm_guonei.js?callback=data_callback',\n", + " 'https://temp.163.com/special/00804KVA/cm_guonei_0{}.js?callback=data_callback'],\n", + " '国际':['https://temp.163.com/special/00804KVA/cm_guoji.js?callback=data_callback',\n", + " 'https://temp.163.com/special/00804KVA/cm_guoji_0{}.js?callback=data_callback'],\n", + " '军事':['https://temp.163.com/special/00804KVA/cm_war.js?callback=data_callback',\n", + " 'https://temp.163.com/special/00804KVA/cm_war_0{}.js?callback=data_callback'],\n", + " '航空':['https://temp.163.com/special/00804KVA/cm_hangkong.js?callback=data_callback&a=2',\n", + " 'https://temp.163.com/special/00804KVA/cm_hangkong_0{}.js?callback=data_callback&a=2'],\n", + " '科技':['https://tech.163.com/special/00097UHL/tech_datalist.js?callback=data_callback',\n", + " 'https://tech.163.com/special/00097UHL/tech_datalist_0{}.js?callback=data_callback']}\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def parse_class(url):\n", + " # 获取分类下的新闻\n", + " req=requests.get(url)\n", + " text=req.text\n", + " res=re.findall(\"title(.*?)\\\\n\",text)\n", + " for i in range(len(res)):\n", + " res[i]=re.sub(\"\\'|\\\"|\\:|'|,|\",\"\",res[i])\n", + " return res" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "titles=[]\n", + "categories=[]\n", + "def get_result(url):\n", + " global titles,categories\n", + " temp=parse_class(url)\n", + " #去除空白页\n", + " if temp[0]=='>网易-404':\n", + " return False\n", + " print(url)\n", + " titles.extend(temp)\n", + " temp_class=[key for i in range(len(temp))]\n", + " categories.extend(temp_class)\n", + " return True\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=========正在爬取国内新闻===========\n", + "https://temp.163.com/special/00804KVA/cm_guonei.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_02.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_03.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_04.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_05.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_06.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_07.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_08.js?callback=data_callback\n", + "=========正在爬取国际新闻===========\n", + "https://temp.163.com/special/00804KVA/cm_guoji.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_02.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_03.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_04.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_05.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_06.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_07.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_08.js?callback=data_callback\n", + "=========正在爬取军事新闻===========\n", + "https://temp.163.com/special/00804KVA/cm_war.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_02.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_03.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_04.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_05.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_06.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_07.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_08.js?callback=data_callback\n", + "=========正在爬取航空新闻===========\n", + "https://temp.163.com/special/00804KVA/cm_hangkong.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_02.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_03.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_04.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_05.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_06.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_07.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_08.js?callback=data_callback&a=2\n", + "=========正在爬取科技新闻===========\n", + "https://tech.163.com/special/00097UHL/tech_datalist.js?callback=data_callback\n", + "https://tech.163.com/special/00097UHL/tech_datalist_02.js?callback=data_callback\n", + "https://tech.163.com/special/00097UHL/tech_datalist_03.js?callback=data_callback\n", + "爬取完毕!\n" + ] + } + ], + "source": [ + "for key in url_list.keys():\n", + " #按分类分别爬取\n", + " print(\"=========正在爬取{}新闻===========\".format(key))\n", + " #遍历每个分类中的子链接\n", + " #首先获取首页\n", + " get_result(url_list[key][0])\n", + " #循环获取加载更多得到的页面\n", + " for i in range(1,10):\n", + " try:\n", + " if get_result(url_list[key][1].format(i)):\n", + " pass\n", + " else:\n", + " continue\n", + " except:\n", + " break\n", + "print(\"爬取完毕!\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "更新数据集...\n", + "更新完毕,共有数据: 2332 条\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Windows\\Temp\\ipykernel_32576\\1167895627.py:6: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " data=new.append(old)\n" + ] + } + ], + "source": [ + "#保存数据\n", + "def update(old,new):\n", + " '''\n", + " 更新数据集:将本次新爬取的数据加入到数据集中(去除掉了重复元素)\n", + " '''\n", + " data=new.append(old)\n", + " data=data.drop_duplicates()\n", + " return data\n", + " \n", + "new=pd.DataFrame({\n", + " \"新闻内容\":titles,\n", + " \"新闻类别\":categories\n", + "})\n", + "old=pd.read_csv(\"F:\\\\桌面\\\\news 爬虫.csv\",encoding='gb18030',engine='python')\n", + "print(\"更新数据集...\")\n", + "df=update(old,new)\n", + "df.to_csv(\"F:\\\\桌面\\\\news 爬虫.csv\",index=None,encoding='gb18030')\n", + "print(\"更新完毕,共有数据:\",df.shape[0],\"条\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 文本分类\n", + "##### 数据清洗、分词" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Building prefix dict from the default dictionary ...\n", + "Loading model from cache C:\\WINDOWS\\TEMP\\jieba.cache\n", + "Loading model cost 0.547 seconds.\n", + "Prefix dict has been built successfully.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "数据预处理完毕!\n" + ] + } + ], + "source": [ + "def remove_punctuation(line):\n", + " line = str(line)\n", + " if line.strip()=='':\n", + " return ''\n", + " rule = re.compile(u\"[^a-zA-Z0-9\\u4E00-\\u9FA5]\")\n", + " line = rule.sub('',line)\n", + " return line\n", + " \n", + "def stopwordslist(filepath): \n", + " stopwords = [line.strip() for line in open(filepath, 'r', encoding=\"gb18030\").readlines()] \n", + " return stopwords \n", + " \n", + "#加载停用词\n", + "stopwords = stopwordslist(\"E:\\\\WeChat Files\\\\wxid_8qoo468n19x111\\\\FileStorage\\\\File\\\\2023-07\\\\stopword.txt\")\n", + "#删除除字母,数字,汉字以外的所有符号\n", + "df['clean_review'] = df['新闻内容'].apply(remove_punctuation)\n", + "#分词,并过滤停用词\n", + "\n", + "df['cut_review'] = df['clean_review'].apply(lambda x: \" \".join([w for w in list(jb.cut(x)) if w not in stopwords]))\n", + "print(\"数据预处理完毕!\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### tf-idf 词向量,构建朴素贝叶斯模型" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "模型训练完毕!\n" + ] + } + ], + "source": [ + "#转词向量\n", + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.naive_bayes import MultinomialNB\n", + "\n", + "tfidf = TfidfVectorizer(norm='l2', ngram_range=(1, 2))\n", + "features = tfidf.fit_transform(df.cut_review)\n", + "labels = df.新闻类别\n", + "#划分训练集\n", + "x_train,x_test,y_train,y_test=train_test_split(features,labels,test_size=0.2,random_state=0)\n", + "model=MultinomialNB().fit(x_train,y_train)\n", + "y_pred=model.predict(x_test)\n", + "print(\"模型训练完毕!\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "分类评估报告如下:\n", + "\n", + " precision recall f1-score support\n", + "\n", + " 军事 0.65 0.55 0.59 119\n", + " 国内 0.67 0.50 0.57 116\n", + " 国际 0.56 0.36 0.44 121\n", + " 科技 0.00 0.00 0.00 19\n", + " 航空 0.37 0.82 0.51 92\n", + "\n", + " accuracy 0.52 467\n", + " macro avg 0.45 0.45 0.42 467\n", + "weighted avg 0.55 0.52 0.51 467\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "e:\\mambaforge_envs\\pytorch\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, msg_start, len(result))\n", + "e:\\mambaforge_envs\\pytorch\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, msg_start, len(result))\n", + "e:\\mambaforge_envs\\pytorch\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, msg_start, len(result))\n" + ] + } + ], + "source": [ + "import itertools\n", + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "from sklearn.metrics import confusion_matrix,accuracy_score,classification_report\n", + "plt.rcParams['font.sans-serif'] = ['SimHei']\n", + "plt.rcParams['axes.unicode_minus'] = False\n", + "\n", + "\n", + "# 绘制混淆矩阵函数\n", + "def plot_confusion_matrix(cm, classes,\n", + " normalize=False,\n", + " title='Confusion matrix',\n", + " cmap=plt.cm.Blues):\n", + " plt.figure(figsize=(8,6))\n", + " plt.imshow(cm, interpolation='nearest', cmap=cmap)\n", + " plt.title(title)\n", + " plt.colorbar()\n", + " tick_marks = np.arange(len(classes))\n", + " plt.xticks(tick_marks, classes, rotation=45)\n", + " plt.yticks(tick_marks, classes)\n", + "\n", + " fmt = '.2f' if normalize else 'd'\n", + " thresh = cm.max() / 2.\n", + " for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n", + " plt.text(j, i, format(cm[i, j], fmt),\n", + " horizontalalignment=\"center\",\n", + " color=\"white\" if cm[i, j] > thresh else \"black\")\n", + "\n", + " plt.tight_layout()\n", + " plt.ylabel('真实标签')\n", + " plt.xlabel('预测标签')\n", + " plt.show()\n", + "class_names=['军事','国内','国际','科技','航空']\n", + "cm= confusion_matrix(y_test, y_pred)\n", + "title=\"分类准确率:{:.2f}%\".format(accuracy_score(y_test,y_pred)*100)\n", + "plot_confusion_matrix(cm,classes=class_names,title=title)\n", + "print(\"分类评估报告如下:\\n\")\n", + "print(classification_report(y_test,y_pred))\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +}