diff --git a/Python程序设计课程设计报告.doc b/Python程序设计课程设计报告.doc index 8894251..8068aa4 100644 Binary files a/Python程序设计课程设计报告.doc and b/Python程序设计课程设计报告.doc differ diff --git a/TR/TrialRecommend/DataRequest.py b/TR/TrialRecommend/DataRequest.py index e645994..ff85df0 100644 --- a/TR/TrialRecommend/DataRequest.py +++ b/TR/TrialRecommend/DataRequest.py @@ -1,5 +1,7 @@ import csv import random +import urllib.parse + from DrissionPage import ChromiumOptions from DrissionPage import ChromiumPage import time @@ -24,9 +26,12 @@ class DataRequest: self.csv_writer=csv.DictWriter(self.f,fieldnames=['文章ID','文章标题','喜欢数量','图片资源']) # self.keyword=keyword - self.url='https://www.xiaohongshu.com/search_result?keyword='+self.keyword+'&type=51' + + self.url='' #数据 self.items=[] + #初始化URL编码 + self.set_url() #打开浏览器 self.drive=ChromiumPage() self.drive.set.scroll.smooth(on_off=True) @@ -37,6 +42,13 @@ class DataRequest: self.drive.get(self.url) self.dataRequest() + + def set_url(self): + self.url = ('https://www.xiaohongshu.com/search_result?keyword=' + self.url_encode(self.keyword)) + def url_encode(self, s): + """将字符串转化为URL编码""" + return urllib.parse.quote(s, safe='') + def clear_csv_file(self): with open(self.data_csv_file_path, 'w') as file1: # 使用'w'模式打开文件 pass # 不需要执行任何操作,因为打开文件时内容已被清空 diff --git a/TR/TrialRecommend/Main.py b/TR/TrialRecommend/Main.py index b24154f..2f69cb7 100644 --- a/TR/TrialRecommend/Main.py +++ b/TR/TrialRecommend/Main.py @@ -1,6 +1,7 @@ import csv import os import random +import shutil import tempfile import time import tkinter as tk @@ -81,9 +82,9 @@ class Mainpage: self.btn_liked = tk.Button(self.page, text='收藏攻略', bg='#D7EFFF',font=('SimHei',15,'bold'),command=self.func_collect) self.btn_liked.place(relx=0.9, rely=0.2, relheight=0.05, relwidth=0.1) - - self.btn_dis_liked = tk.Button(self.page, text='取消收藏', bg='#D7EFFF',font=('SimHei',15,'bold'),command=self.func_discollect) - self.btn_dis_liked.place(relx=0.9, rely=0.3, relheight=0.05, relwidth=0.1) + # + # self.btn_dis_liked = tk.Button(self.page, text='取消收藏', bg='#D7EFFF',font=('SimHei',15,'bold'),command=self.re) + # self.btn_dis_liked.place(relx=0.9, rely=0.3, relheight=0.05, relwidth=0.1) self.lable_like=tk.Label(self.page,text='喜欢人数:'+self.likes,font=('SimHei',15,'bold')) self.lable_like.place(relx=0.05, rely=0.93) @@ -234,7 +235,7 @@ class Mainpage: self.btn_pre = tk.Button(self.page2, text='上一篇', bg='#D7EFFF',font=('SimHei',15,'bold'),command=self.c_pre_data) self.btn_pre.place(relx=0.45, rely=0.35, relheight=0.08, relwidth=0.09) - self.btn_dis_liked = tk.Button(self.page2, text='取消收藏', bg='#D7EFFF',font=('SimHei',15,'bold'),command=self.func_discollect) + self.btn_dis_liked = tk.Button(self.page2, text='取消收藏', bg='#D7EFFF',font=('SimHei',15,'bold'),command=self.remove_rows_with_content) self.btn_dis_liked.place(relx=0.9, rely=0.3, relheight=0.05, relwidth=0.1) def notes_request(self,next_back): @@ -528,6 +529,7 @@ class Mainpage: for row in reader: if i==self.current_data_index: dic['文章内容']=row[1] + i+=1 with open('collections/{}.csv'.format(self.user),'a+',encoding='utf-8',newline='') as f: writer = csv.DictWriter(f, fieldnames=['文章ID','文章标题','图片资源','文章内容']) @@ -560,7 +562,26 @@ class Mainpage: # 将临时文件重命名为原始文件名 os.rename(temp.name, 'collections/{}.csv'.format(self.user)) + def remove_rows_with_content(self): + dis_collect.dis_collec(self.user, self.c_data_index) + + # 创建一个临时文件 + with tempfile.NamedTemporaryFile(mode='w', delete=False,encoding='utf-8',newline='') as tmpfile: + # 打开原始文件并读取内容 + with open('collections/{}.csv'.format(self.user), 'r', newline='',encoding='utf-8') as infile: + reader = csv.reader(infile) + writer = csv.writer(tmpfile) + + # 遍历每一行,如果不包含指定内容则写入临时文件 + i=0 + for row in reader: + if self.c_data_index != i: + writer.writerow(row) + i+=1 + # 替换原始文件为临时文件 + tmpfile.close() + shutil.move(tmpfile.name, 'collections/{}.csv'.format(self.user)) if __name__ == '__main__': root = tk.Tk() diff --git a/TR/TrialRecommend/Notes_Request.py b/TR/TrialRecommend/Notes_Request.py index 6763321..a62c2e0 100644 --- a/TR/TrialRecommend/Notes_Request.py +++ b/TR/TrialRecommend/Notes_Request.py @@ -15,15 +15,15 @@ def notes_request(url): 'Referer':'https://www.xiaohongshu.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'} cookies = { - 'abRequestId':'a3c8a855-ed85-57f6-91fe-3e0acedffde8', - 'a1':'18f9b67ecdbh41bri2la0dgguminrd7dmmrk4pxf750000215521', - 'webId':'6d97ebd3e6051489537e7a6aa1d1cf99', - 'gid':'yYijDKYydJ6JyYijDKWdS6UCfDx4yDF3J108FiWfkk763T28IFfWf4888Jy22Jy8WYf0SyjD', - 'webBuild':'4.17.2', - 'web_session':'040069b3643d32585fff79ee79344bd4b89bc6', - 'acw_tc':'459a6388281f21d6215ff80f1402afbfdf47eb5a1ef949b426ace99565a6fc50', - 'websectiga':'7750c37de43b7be9de8ed9ff8ea0e576519e8cd2157322eb972ecb429a7735d4', - 'sec_poison_id':'b1e1329b-735f-427c-bfd0-698a912c0366', + 'abRequestId':'a1d1855c-4c32-5307-a9f1-9d3f34a192cf', + 'a1':'1900bc790f5y2g9t1mkcnviv0sy4y0pfv4afgtuj250000186611', + 'webId':'b7d9160688e1684d896a4dc0dab65e36', + 'gid':'yj88DSWfdJhjyj88DSWj8497i2vJkj9y6TSI0VJh3h8Mvi284v8Uik888yYKKyy8Wq48fY4i', + 'webBuild':'4.20.1', + 'web_session':'040069b3643d32585fffe2225c344b136354be', + 'acw_tc':'5a6bd4ac6c786b806cb96212649c76bb7a0ac62792834403c50f508645293c50', + 'websectiga':'3633fe24d49c7dd0eb923edc8205740f10fdb18b25d424d2a2322c6196d2a4ad', + 'sec_poison_id':'b2862aa3-62f2-48ce-9b27-2a44baa4b714', 'xsecappid':'xhs-pc-web' } diff --git a/TR/TrialRecommend/TF_IDF.py b/TR/TrialRecommend/TF_IDF.py index c2e4d97..7942e8e 100644 --- a/TR/TrialRecommend/TF_IDF.py +++ b/TR/TrialRecommend/TF_IDF.py @@ -1,5 +1,4 @@ import csv - import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity @@ -7,16 +6,12 @@ from sklearn.metrics.pairwise import cosine_similarity def tf_idf(items, user): # 数据载入 articles = items - df = pd.DataFrame(articles) - # 提取TF-IDF特征 tfidf_vectorizer = TfidfVectorizer() tfidf_matrix = tfidf_vectorizer.fit_transform(df['content']) - # 计算余弦相似度 cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix) - # 根据相似度推荐 def recommend_articles(article_id, user, cosine_sim=cosine_sim): sim_scores = list(enumerate(cosine_sim[article_id - 1])) @@ -28,6 +23,5 @@ def tf_idf(items, user): for j in article_indices: write.writerow(items[j]) - # 推荐与文章ID为1的旅游攻略相似的文章 recommend_articles(1,user) \ No newline at end of file diff --git a/TR/TrialRecommend/__pycache__/DataRequest.cpython-312.pyc b/TR/TrialRecommend/__pycache__/DataRequest.cpython-312.pyc index cd7e1a3..a1f9174 100644 Binary files a/TR/TrialRecommend/__pycache__/DataRequest.cpython-312.pyc and b/TR/TrialRecommend/__pycache__/DataRequest.cpython-312.pyc differ diff --git a/TR/TrialRecommend/__pycache__/Main.cpython-312.pyc b/TR/TrialRecommend/__pycache__/Main.cpython-312.pyc index d7f8231..2e80692 100644 Binary files a/TR/TrialRecommend/__pycache__/Main.cpython-312.pyc and b/TR/TrialRecommend/__pycache__/Main.cpython-312.pyc differ diff --git a/TR/TrialRecommend/__pycache__/Notes_Request.cpython-312.pyc b/TR/TrialRecommend/__pycache__/Notes_Request.cpython-312.pyc index f1e65ca..e5fae00 100644 Binary files a/TR/TrialRecommend/__pycache__/Notes_Request.cpython-312.pyc and b/TR/TrialRecommend/__pycache__/Notes_Request.cpython-312.pyc differ diff --git a/TR/TrialRecommend/__pycache__/TF_IDF.cpython-312.pyc b/TR/TrialRecommend/__pycache__/TF_IDF.cpython-312.pyc index e40eae3..eb961b9 100644 Binary files a/TR/TrialRecommend/__pycache__/TF_IDF.cpython-312.pyc and b/TR/TrialRecommend/__pycache__/TF_IDF.cpython-312.pyc differ diff --git a/TR/TrialRecommend/collections/123.csv b/TR/TrialRecommend/collections/123.csv new file mode 100644 index 0000000..c08f976 --- /dev/null +++ b/TR/TrialRecommend/collections/123.csv @@ -0,0 +1 @@ +652e1987000000001a01728c,上海CityWalk丨花一天时间打卡经典路线‼️,"['http://sns-webpic-qc.xhscdn.com/202406121747/5d91eba5a30122575b2c4146228f05ae/1040g2sg30qamrg2c7m305o2pk3s08c1iul9cau0!nc_n_webp_mw_1', 'http://sns-webpic-qc.xhscdn.com/202406121747/acd054cac0306a40b3017b83b965aaae/1040g2sg30qamrg2c7m0g5o2pk3s08c1id68puj0!nc_n_webp_mw_1', 'http://sns-webpic-qc.xhscdn.com/202406121747/8a44ffaff123d9ac7cc8ce59804813cc/1040g2sg30qamrg2c7m105o2pk3s08c1irrp23qo!nc_n_webp_mw_1', 'http://sns-webpic-qc.xhscdn.com/202406121747/c838f8b3d6b4937fc9eb443eb9439a42/1040g2sg30qamrg2c7m005o2pk3s08c1ih4ij41g!nc_n_webp_mw_1', 'http://sns-webpic-qc.xhscdn.com/202406121747/a1091a8d90a659eb78aeeba1c27c11a0/1040g2sg30qamrg2c7m1g5o2pk3s08c1ierqbkeg!nc_n_webp_mw_1', 'http://sns-webpic-qc.xhscdn.com/202406121747/52484f0b10916edfec05be159b17b35c/1040g2sg30qamrg2c7m205o2pk3s08c1iinbrhl8!nc_n_webp_mw_1', 'http://sns-webpic-qc.xhscdn.com/202406121747/def3baa4ab87428dd9f7668c0e4a0d5b/1040g2sg30qamrg2c7m2g5o2pk3s08c1ivce38f8!nc_n_webp_mw_1', 'http://sns-webpic-qc.xhscdn.com/202406121747/720636b2cd678875f60aff8c59ac8bda/1040g2sg30qamrg2c7m3g5o2pk3s08c1i07b4gb0!nc_n_webp_mw_1', 'http://sns-webpic-qc.xhscdn.com/202406121747/422b9900a3da1949703eed0b17645597/1040g2sg30qamrg2c7m405o2pk3s08c1ira5no60!nc_n_webp_mw_1', 'http://sns-webpic-qc.xhscdn.com/202406121747/b7fb32de5dc7ef70ac09d95884107cd7/1040g2sg30qamrg2c7m4g5o2pk3s08c1iuenb4no!nc_n_webp_mw_1']",上海总要来一趟吧
确实好拍又好逛
如果你只有周末有时间
可以看看我总结的这篇一日游攻略
主打一个花zui少的时间
逛完zui经典的上海
.
✅CityWalk路线
武康大楼—武康路/长乐路—静安寺—陆家嘴三件套—轮渡—外滩(白天)—豫园/城隍庙—南京路步行街—外滩(夜景)
.
1️⃣武康大楼
🚈地铁10、11号线交通大学站7号口出
作为上海地标建筑之一,超火的网红打卡点,始建于1924年,中国历史文化名街,附近有【宋庆龄故居】选择性游玩(🎫20r)
.
2️⃣武康路/长乐路
比较有上海当地人文气息的宝藏徒步路线,一路可以逛吃不停,街边都是梧桐树,秋天的梧桐树不用我说了吧!氛围感拉满,还有好多爆火的网红店都在这条路线上
.
3️⃣静安寺
作为上海zui古老的寺庙,琉璃金瓦的古塔建筑被现代化建筑包围,碰撞出了别致的美感
🎫50,如果不是特意要去拜佛可以不去,zui佳打卡机位在对面人行天桥上,(如果到饭点了,可以在静安寺站这附近吃,楼下有商场)
.
4️⃣陆家嘴三件套
📍导航【金茂君悦大酒店】,地铁静安寺站乘至陆家嘴站8号口出
📷zui佳拍摄机位需要站在花坛边缘,zui容易拍的方式是手机打开广角,手机就放在脚下,摆好动作定时拍摄
.
5️⃣轮渡—外滩(白天)
🛥2块钱看尽黄浦江两岸风景
打卡完三件套,步行至【东昌路渡口】,乘坐轮渡到【金陵东路渡口】,2块钱坐上轮渡,到了外滩就是上海zui核心的地标了,这里有万国建筑群,对面就是东方明珠群像
.
6️⃣豫园/城隍庙(选择性游玩)
豫园🎫30r/城隍庙10r(商业街免费)
豫园是拥有四百多年历史的江南园林,纸醉金迷上海滩的一处世外桃源,一草一木都不输苏州园林,城隍庙就在豫园隔壁,蛮好逛的
.
7️⃣南京路步行街
上海zui具代表性的商业街区,非常适合逛吃,东方明珠的打卡机位也穿插在各个街道
.
8️⃣外滩(夜景)
来上海怎么能不看外滩夜景呢!金黄色的万国建筑群和对岸东方明珠建筑群无不展示了现代都市美
.
📍交通
🚈高铁杭州东-上海虹桥站
✅游玩路线以地铁+步行为主
地铁可以刷zfb或者下载Metro大都会app
.
diff --git a/TR/TrialRecommend/collections/Null.csv b/TR/TrialRecommend/collections/Null.csv new file mode 100644 index 0000000..e69de29 diff --git a/TR/abc.py b/TR/abc.py new file mode 100644 index 0000000..4604621 --- /dev/null +++ b/TR/abc.py @@ -0,0 +1,12 @@ +import urllib.parse + + +def url_encode(s): + """将字符串转化为URL编码""" + return urllib.parse.quote(s, safe='') + + +# 示例 +input_string = input("请输入要编码的字符串:") +encoded_string = url_encode(input_string) +print(encoded_string) \ No newline at end of file