首页
开往
统计
留言
Search
1
Docker的基础操作
885 阅读
2
Linux基础基本操作
539 阅读
3
python爬取无水印某手视频
267 阅读
4
文件压缩
189 阅读
5
Dockerfile构建Nginx镜像
186 阅读
linux
建站技术
Java
Python
Mysql
其他技术
登录
Search
标签搜索
linux
docker
python
mysql
建站技术
爬虫
java
shell脚本
小钊
累计撰写
15
篇文章
累计收到
0
条评论
首页
栏目
linux
建站技术
Java
Python
Mysql
其他技术
页面
开往
统计
留言
搜索到
3
篇与
的结果
2026-04-05
python爬取无水印某手视频
环境搭建本代码使用了os、time、requests库,仅只有requests库需要下载pip install requests抓包方法{tabs}{tabs-pane label="步骤一"} 按F12打开调试,进入Network进行抓包 {/tabs-pane}{tabs-pane label="步骤二"} 过滤Fetch/xhr {/tabs-pane}{tabs-pane label="找到需要的接口后"}右键->复制->复制curl(bash) 然后访问 在线curl命令转代码 将curl转化为python代码{/tabs-pane}{/tabs}抓包{tabs}{tabs-pane label="步骤一"}打开调试后进行搜索操作{/tabs-pane}{tabs-pane label="步骤二"} 过滤Fetch/xhr{/tabs-pane}{tabs-pane label="步骤三"}进行各个请求的分析可得到/graphql即为我们所需的接口{/tabs-pane}{/tabs}代码编写本代码保护四部分第一部分为请求头、cookies的信息(自行抓取,无代码展示)第二部分为根据关键词获取视频信息的函数def get_video_url(keyword, pcursor): # 定义请求头 json_data = { 'operationName': 'visionSearchPhoto', 'variables': { 'keyword': keyword, 'page': 'search', 'pcursor': str(pcursor) }, 'query': 'fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}\n', } # 进行异常抛出操作 try: # 发送post请求 response = requests.post('https://www.kuaishou.com/graphql', cookies=cookies, headers=headers, json=json_data).json() feeds = response["data"]["visionSearchPhoto"]["feeds"] # 如果有内容则执行 if feeds: # 循环取各个视频的信息 for feed in feeds: # 获取视频名称 name = feed["author"]["name"] # 获取视频链接 video_url = feed["photo"]["manifest"]["adaptationSet"][0]["representation"][0]["url"] # 调用下载视频函数进行下载视频 dow_status = dowload_video(name=name, video_url=video_url, dir_name=keyword) # 如果下载视频函数返回了true则返回true if dow_status: return True # 如果未返回任何信息则暂停1秒 time.sleep(1) # 否则返回True else: return True # 如果上述代码运行异常则返回true except: return True第三部分为下载函数def dowload_video(video_url, name, dir_name): try: # 发送get请求获取视频内容 content = requests.get(url=video_url, headers=headers, cookies=cookies).content # 首先判断video目录是否存在 其次判断video/dir_name目录是否存在 如果不存在则创建 try: try: os.mkdir("video/") except: pass os.mkdir(f"video/{dir_name}/") except: pass # 使用open读入文件 with open(f"video/{dir_name}/{name}.mp4", "wb") as f: # 写入文件内容 f.write(content) # 输出提示 print(f"{name}下载完毕") except: # 如果发送错误则返回true return True第四部分为程序主入口if __name__ == '__main__': keyword = input("请输入要爬取视频的类型:") page = int(input("请输入要爬取的页数:")) for i in range(0, page): status = get_video_url(keyword=keyword, pcursor=i+1) if status: print("也许已下载完相应页数的视频,也许被风控了,将自动退出程序") break time.sleep(1)
2026年04月05日
267 阅读
0 评论
0 点赞
2024-06-24
python爬虫教程
requests库及lxml库入门靶场地址:http://spiderbuf.cn/s01/from lxml import etree import requests import csv html = requests.get("http://spiderbuf.cn/s01/").text # 取网页源码 parse_html = etree.HTML(html) # 解析html data = [] # 初始化数据列表 data.append(parse_html.xpath("//thead/tr/th/text()")) # 取标头内容并添加到数据列表 f = open("info.csv", 'w', encoding='utf-8', newline='') # 使用w打开info.csv文件 csv = csv.writer(f) # 创建csv对象 table = parse_html.xpath("//tbody//tr") # 取所有的数据列 for i in table: # 循环每个数据列 data.append(i.xpath(".//td//text()")) # 读取每列的数据并添加到数据列表 csv.writerows(data) # 调用函数写入csv文件此次练习使用了1.lxml库的etree类,用于解析html并取相关数据2.requests库,用于发起网页请求,获取网页源码3.csv库,用于保存爬取到的数据2.http请求分析及头构造使用靶场地址:http://spiderbuf.cn/s02/import requests import csv from lxml import etree headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0" } html = requests.get(url="http://spiderbuf.cn/s02/", headers=headers).text # 取网页源码 parse_html = etree.HTML(html) # 解析html data = [] # 初始化数据列表 data.append(parse_html.xpath("//thead/tr/th/text()")) # 取标头内容并添加到数据列表 f = open("info.csv", 'w', encoding='utf-8', newline='') # 使用w打开info.csv文件 csv = csv.writer(f) # 创建csv对象 table = parse_html.xpath("//tbody//tr") # 取所有的数据列 for i in table: # 循环每个数据列 data.append(i.xpath(".//td//text()")) # 读取每列的数据并添加到数据列表 csv.writerows(data) # 调用函数写入csv文件此题与第一题的区别是添加了请求头,因为网页做了请求头校验requests默认的请求头是python分页参数分析及翻页爬取靶场地址:http://spiderbuf.cn/s04/?pageno=1from lxml import etree import requests import csv data = [] # 初始化数据列表 f = 1 # 标记是否是首次运行 for i in range(1, 6): # 循环页数 url = "http://spiderbuf.cn/s04/?pageno="+str(i) # 拼接url print(url) html = requests.get(url).text # 取网页源码 parse_html = etree.HTML(html) # 解析html if f: data.append(parse_html.xpath("//thead/tr/th/text()")) # 取标头内容并添加到数据列表 f = 0 # 运行后将值更改为0即非第一次运行 table = parse_html.xpath("//tbody//tr") # 取所有的数据列 for i in table: # 循环每个数据列 td = i.xpath(".//td//text()") td.pop(0) data.append(td) # 读取每列的数据并添加到数据列表 f = open("info.csv", 'w', encoding='utf-8', newline='') # 使用w打开info.csv文件 csv = csv.writer(f) # 创建csv对象 csv.writerows(data) # 调用函数写入csv文件这题难点在于拼接字符串时的数据类型,与初始化数据列表放置的位置无序号翻页靶场地址:http://spiderbuf.cn/e03/import requests from lxml import etree import csv data = [] def get_page_info(url: str) -> list: global data html = requests.get(url).text # 获取初始页内容 parse_html = etree.HTML(html) table = parse_html.xpath("//tbody//tr") # 取所有的数据列 for i in table: # 循环每个数据列 data.append(i.xpath(".//td//text()")) # 读取每列的数据并添加到数据列表 return data html = requests.get("http://spiderbuf.cn/e03/").text # 获取初始页内容 parse_html = etree.HTML(html) # 调用方法解析html text = parse_html.xpath('//ul[@class="pagination"]//li//a//@href') """ xpath解析: //ul[@class="pagination"] 从网页根进行匹配类名为pagination的ul列表 //li 继续从上衣一步中继续匹配li元素 //a 继续从上一步中继续匹配a元素 //@href 继续从上一步取出href属性的值 """ data.append(parse_html.xpath("//thead/tr/th/text()")) # 取标头内容并添加到数据列表 for path in text: # 循环列表取每页page的名称 url = "http://spiderbuf.cn/e03/" + path # 拼接当前page的链接 get_page_info(url) # 调用函数进行读取当前page下的数据 f = open("info.csv", 'w', encoding='utf-8', newline='') # 使用w打开info.csv文件 csv = csv.writer(f) # 创建csv对象 csv.writerows(data) # 调用方法将文件写入csv文件内难点:在于他的页路径不是有规律的,而是无规律的,需要使用xpath获取到每页的页索引
2024年06月24日
156 阅读
0 评论
0 点赞
2024-04-08
python基础语句
打印文字print('')收集信息input('') #例: x=str(input('请输入你的年龄')) print('您的年龄是%s岁'%(x)) #输入:15 #输出:您的年龄是15岁查询文件格式类型type() #使用此函数时一般需要搭配print函数 #类型分为1.字符串型(str)2.浮点数型(float)3.整数型(int) #例子 a=10 b=10.0 c='10' print(type(a)) print(type(b)) print(type(c)) ''' 输出: <class 'int'> <class 'float'> <class 'str'> '''类型格式化(1)将内容格式为整数int() #1.浮点数格式为整数 x=int(10.1) print(x) #输出:10 #2.浮点数格式化为整数时为直接取整,非四舍五入 y=int(10.7) print(y) #输出:10 #3.字符串不可格式为整数(2)将内容格式为字符串str()#所以格式均可格式为字符串 x=str(1) y=str(3.14) print(x) print(y) #输出:1#3.14(3)将内容格式为浮点数float() #1.将整数型格式为浮点数型 a=float(10) print(a) #输出:10.0 #2.将字符串型格式为浮点数型 b=('10') print(b) #输出:10.0 #3.带文字的字符串不可转换判(1)单向判断a=10 if a<10: print('a小于10') #输出:a小于10(2)双向判断a=11 if a<10: print('a小于10') else: print('a大与10') #输出:a大与10(3)多向判断a=11 if a<10: print('a小于10') elif 10<a<20: print('a大与10小于20') else: print('a大于20') #输出:a大与10导入库(模块)import 模块名 例:import repoests循环# while循环 i = 0 while i>=3: print(i) i+=1 ''' 输出:0 1 2 ''' # for循环 for i in range(3): print(i) ''' 输出:0 1 2 '''
2024年04月08日
137 阅读
0 评论
0 点赞