众所周知,在csdn下载资源有很多都是要收费的,最常见的是要积分的
但是小编囊中羞涩,买不起VIP,也没有积分,而资源又要一个一个点进去才知道是不是免费的(最爱0积分了,老白嫖怪了),很烦
就花了一天做了个爬虫小代码来解决问题(一天?俺是菜鸟,本来也没咋练过)
顺便重温了爬虫和正则表达式,过程对本菜鸟来说挺痛苦的,估计也没人想知道,就直接放最终结果了
# -*- coding: utf-8 -*-
import requests
import re
url = f'https://so.csdn.net/api/v3/search?q={key}&t=doc&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&ct=-1&pnt=-1&ry=-1&ss=-1&dct=-1&vco=-1&cc=-1&sc=-1&akt=-1&art=-1&ca=-1&prs=&pre=&ecc=-1&ebc=-1&platform=wap'
# 定义 HTTP 请求头部信息,模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36 Edg/115.0.1901.203',
}
# 发送 HTTP GET 请求,并获取响应数据
response = str(requests.get(url, headers=headers).json())
originfile = re.findall("'originfile': '(.*?)'", response)
sourcescore = re.findall("'sourcescore': '(.*?)'", response)
digest = re.findall("'digest': '(.*?)'", response)
url = re.findall("'url': '(.*?)'", response)
author = re.findall("'author': '(.*?)'", response)
lenth = min([len(sourcescore), len(originfile), len(author), len(digest), len(url)])
if lenth:
dicts = {i: [sourcescore[i], originfile[i], author[i], digest[i], url[i]] for i in range(lenth)}
else:
print("没有找到您所要的数据")
return 0
b = ["所需积分:", "文件:", "上传者:", "简介:", "下载地址:"]
for i in dicts.values():
if int(i[0]) <= value:
for flag in range(5):
print(b[flag] + i[flag])
print("\n")
# csdn积分资源搜寻器
def search(key: str, value: int):
# 第一步,数据爬取
url = f'https://so.csdn.net/api/v3/search?q={key}&t=doc&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&ct=-1&pnt=-1&ry=-1&ss=-1&dct=-1&vco=-1&cc=-1&sc=-1&akt=-1&art=-1&ca=-1&prs=&pre=&ecc=-1&ebc=-1&platform=wap'
# 定义 HTTP 请求头部信息,模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36 Edg/115.0.1901.203',
}
# 发送 HTTP GET 请求,并获取响应数据
response = str(requests.get(url, headers=headers).json())
# 第二部,数据处理
originfile = re.findall("'originfile': '(.*?)'", response)
sourcescore = re.findall("'sourcescore': '(.*?)'", response)
digest = re.findall("'digest': '(.*?)'", response)
url = re.findall("'url': '(.*?)'", response)
author = re.findall("'author': '(.*?)'", response)
lenth = min([len(sourcescore), len(originfile), len(author), len(digest), len(url)])
if lenth:
dicts = {i: [sourcescore[i], originfile[i], author[i], digest[i], url[i]] for i in range(lenth)}
else:
print("没有找到您所要的数据")
return 0
# 第三步,打印输出
b = ["所需积分:", "文件:", "上传者:", "简介:", "下载地址:"]
for i in dicts.values():
if int(i[0]) <= value:
for flag in range(5):
print(b[flag] + i[flag])
print("\n")
if __name__ == '__main__':
print("这里是csdn免费资源搜寻器")
keys = input("请输入你想搜索的东西:")
values = int(input("请输入你想限制的最大积分数:"))
print("好的,请稍等片刻")
search(keys, values)
s = input("任务完成输入任意字符回车可关闭窗口")
此时,整个案例就算完成了,后面附加完整代码和打包成.exe文件的方法
# -*- coding: utf-8 -*-
import requests
import re
"""
由于csdn的付费资源也是0积分,俺是菜鸟,能力不足,无法筛选出去,请留意
"""
# csdn积分资源搜寻器
def search(key: str, value: int):
# 第一步,数据爬取
url = f'https://so.csdn.net/api/v3/search?q={key}&t=doc&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&ct=-1&pnt=-1&ry=-1&ss=-1&dct=-1&vco=-1&cc=-1&sc=-1&akt=-1&art=-1&ca=-1&prs=&pre=&ecc=-1&ebc=-1&platform=wap'
# 定义 HTTP 请求头部信息,模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36 Edg/115.0.1901.203',
}
# 发送 HTTP GET 请求,并获取响应数据
response = str(requests.get(url, headers=headers).json())
# 第二部,数据处理
originfile = re.findall("'originfile': '(.*?)'", response)
sourcescore = re.findall("'sourcescore': '(.*?)'", response)
digest = re.findall("'digest': '(.*?)'", response)
url = re.findall("'url': '(.*?)'", response)
author = re.findall("'author': '(.*?)'", response)
lenth = min([len(sourcescore), len(originfile), len(author), len(digest), len(url)])
if lenth:
dicts = {i: [sourcescore[i], originfile[i], author[i], digest[i], url[i]] for i in range(lenth)}
else:
print("没有找到您所要的数据")
return 0
# 第三步,打印输出
b = ["所需积分:", "文件:", "上传者:", "简介:", "下载地址:"]
for i in dicts.values():
if int(i[0]) <= value:
for flag in range(5):
print(b[flag] + i[flag])
print("\n")
# 传参调用
if __name__ == '__main__':
print("这里是csdn免费资源搜寻器")
keys = input("请输入你想搜索的东西:")
values = int(input("请输入你想限制的最大积分数:"))
print("好的,请稍等片刻")
search(keys, values)
s = input("任务完成输入任意字符回车可关闭窗口")
打开终端输入运行命令
pip install pyinstaller
pyinstaller -F -i image.ico -n name main.py
图标最好用.ico格式,(虽然我的png好像也成功了),图标要换成自己的图片路径,name换成自己想要的名字,main.py 是你要打包的文件,没弹窗有输出的别写-w
-F
或 --onefile
:默认为禁用,即生成一个文件夹而不是单个可执行文件。-D
或 --onedir
:默认为启用,即生成一个包含可执行文件和相关文件的文件夹。-n
或 --name=
:默认为输入文件的基本名称。-w
或 --windowed
:默认为禁用,即生成一个没有带控制台窗口的控制台程序。-c
或 --console
:默认为启用,即生成一个有控制台窗口的窗口化程序。-i
或 --icon=
:默认为无,默认情况下没有指定图标文件。-a
或 --add-data
:默认为无,默认情况下不添加任何文件或目录。-b
或 --debug
:默认为禁用,即生成一个不带调试信息的可执行文件。-p
或 --path=
:默认为系统默认的模块搜索路径。-y
或 --noconfirm
:默认为禁用,即在运行过程中会询问问题。-w
参数禁用控制台窗口,生成的程序将不会显示命令行窗口。这在需要一个无窗口的GUI应用程序时非常有用。
-c
参数生成一个带有控制台窗口的控制台程序,即生成的程序将在命令行窗口中运行,并可以查看程序的输出和错误信息。
默认情况下,PyInstaller会生成一个带有控制台窗口的控制台程序,因此-c
参数默认启用,而 -w
参数默认禁用。
成功后生成build,dist,spec,东西在dist里,其他不重要,可删。