前言
嗨喽~大家好呀,这里是魔王呐 !
又是普普通通采集美女得一天啊~
目录
; 环境使用:
- Python 3.8
- Pycharm
- 谷歌浏览器
- 谷歌驱动
模块使用:
- requests >>> pip install requests
- re
- json
- selenium >>> pip install selenium==3.141.0
安装python第三方模块:
- win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
- 在pycharm中点击Terminal(终端) 输入安装命令
如何配置pycharm里面的python解释器?
- 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)
- 点击齿轮, 选择add
- 添加python安装路径
pycharm如何安装插件?
- 选择file(文件) >>> setting(设置) >>> Plugins(插件)
- 点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation / 汉化插件 输入 Chinese
- 选择相应的插件点击 install(安装) 即可
- 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效
思路分析
先采集一个视频内容 —> 采集这个视频博主所有视频内容
如何实现案例: 流程思路
一. 数据来源分析:
- 明确需求: 采集那个网站上面什么数据内容 —> 1. 视频标题 2. 视频播放链接
- 通过开发者工具进行抓包分析, 分析数据所在地方
- F12 或者 鼠标右键点击检查选择network 刷新网页 —> 为了让本网页相关数据内容, 重新加载一遍
- 找视频播放链接在什么地方 —> 找media
- 已知 视频播放链接 —> 分析这个视频播放链接在什么可以得到 通过搜索分析, 可以找到视频数据来源, 但是链接是转码了
二. 代码实现步骤过程
- 发送请求, 模拟浏览器对于url地址发送请求
- 获取数据, 获取服务器返回响应数据 开发者工具里面 response
- 解析数据, 提取我们想要数据内容
- 视频链接
- 视频标题
- 保存数据, 把视频内容保存本地文件夹
批量采集代码
导入数据请求模块
第三方模块 需要在cmd里面或者pycharm终端里面进行安装 pip install requests
import requests
import re
import json
from pprint import pprint
from selenium import webdriver
import time
“””
发送请求, 模拟浏览器对于url地址发送请求
- 对于url地址 请求成功, 但是不代表你一定得到数据
- 为什么没有得到我们想要数据内容 当我们被服务器识别出来是爬虫程序的时候, 我可能得不到数据, 或者得到数据不是我们想要的
selenium 模拟人的行为去操作浏览器, 获取所有视频ID
定位元素获取视频播放页url地址
selenium —> 浏览器驱动谷歌 —> 浏览器谷歌
“””
打开浏览器 实例化浏览器对象 driver 浏览器对象
driver = webdriver.Chrome()
输入网址, 访问网站
因为代码里有链接,不给过的,所以我只能截个图展示一下,你们可以根据下方图片添加完整哦~
或点击 蓝色字体 领取完整源码,我都放在这里了。
滑动页面,让网页加载所有视频内容 selenium 去执行js代码
def drop_down():
"""执行页面滚动的操作 自定义函数"""
for x in range(1, 30, 4):
time.sleep(1)
j = x / 9
js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
driver.execute_script(js)
drop_down()
通过元素定位 通过 css 选择器查找元素 所有li标签
lis = driver.find_elements_by_css_selector('.Eie04v01')
if lis:
pass
else:
lis = driver.find_elements_by_css_selector('.ECMy_Zdt')
for li in lis:
try:
time.sleep(1)
url = li.find_element_by_css_selector('a').get_attribute('href')
print(url)
确定请求url地址
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
发送请求
response = requests.get(url=url, headers=headers)
“””
获取数据, 获取服务器返回响应数据
开发者工具里面 response —> response.text
解析数据, 提取我们想要数据内容
- 视频链接
- 视频标题
正则re提取数据内容
调用re模块findall方法 –> 找到我们想要的数据内容
re.findall(‘什么数据’, ‘什么地方’)
从什么地方, 去找什么样的数据内容
从 response.text 里面 去找 <title data-react-helmet="true">(.*?)</title>
其中(.*?) 这段是我们要的数据
print(json_data)
–> 打印字典数据 返回一行数据内容
pprint(json_data)
–> 打印字典数据 返回多行数据内容 展开效果
字典数据提取内容
键值对取值 —> 根据冒号左边的内容[键], 提取冒号右边的内容[值]
“””
提取标题
title = re.findall('(.*?)', response.text)[0]
video_info = re.findall('(.*?)</script'</span><span class="token punctuation">,</span> response<span class="token punctuation">.</span>text<span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>
html_data <span class="token operator">=</span> requests<span class="token punctuation">.</span>utils<span class="token punctuation">.</span>unquote<span class="token punctuation">(</span>video_info<span class="token punctuation">)</span>
json_data <span class="token operator">=</span> json<span class="token punctuation">.</span>loads<span class="token punctuation">(</span>html_data<span class="token punctuation">)</span>
video_url <span class="token operator">=</span> <span class="token string">'https:'</span> <span class="token operator">+</span> json_data<span class="token punctuation">[</span><span class="token string">'32'</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">'aweme'</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">'detail'</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">'video'</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">'bitRateList'</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">'playAddr'</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">'src'</span><span class="token punctuation">]</span>
</code></pre><p>"""<br>保存数据, 把视频内容保存本地文件夹</p><ul><li>对于视频链接发送请求, 获取数据的</li></ul><p>response.content 获取二进制数据内容<br>"""</p><pre><code class="prism language-python">
video_content <span class="token operator">=</span> requests<span class="token punctuation">.</span>get<span class="token punctuation">(</span>url<span class="token operator">=</span>video_url<span class="token punctuation">,</span> headers<span class="token operator">=</span>headers<span class="token punctuation">)</span><span class="token punctuation">.</span>content
<span class="token keyword">with</span> <span class="token builtin">open</span><span class="token punctuation">(</span><span class="token string">'video\\'</span> <span class="token operator">+</span> title <span class="token operator">+</span> <span class="token string">'.mp4'</span><span class="token punctuation">,</span> mode<span class="token operator">=</span><span class="token string">'wb'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> f<span class="token punctuation">:</span>
f<span class="token punctuation">.</span>write<span class="token punctuation">(</span>video_content<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>title<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>video_url<span class="token punctuation">)</span>
<span class="token keyword">except</span><span class="token punctuation">:</span>
<span class="token keyword">pass</span>
</code></pre><h2><a id="_269"></a>下面,我们来欣赏一下小姐姐吧~</h2><p><img src="https://img-blog.csdnimg.cn/b9c4525cef1043e8820725724e64e13e.png"></p><p><img src="https://img-blog.csdnimg.cn/7b3863f9e0a74ebbb77f0262e05920c3.png"><br><img src="https://img-blog.csdnimg.cn/70ae7b2f0d8e404eafec68791a9f9a4c.png"><br><img src="https://img-blog.csdnimg.cn/8e1ede715120463e8a60330d72c8640e.png"><br><img src="https://img-blog.csdnimg.cn/270467d4e40d489da783ca12c7aee960.png"><br><img src="https://img-blog.csdnimg.cn/3c7dbdb577954bd1840add5427298e99.png"><br><img src="https://img-blog.csdnimg.cn/853a3085d6c94192a56c074fb38f8b16.png"><br><img src="https://img-blog.csdnimg.cn/442e16e6af70497c8ab6786ed93880ff.png"><br><img src="https://img-blog.csdnimg.cn/541842d37a22477da37c7b8555a2b67b.png"></p><p>文章看不懂,我专门录了对应的视频讲解,本文只是大致展示,完整代码和视频教程点击下方蓝字</p><p>点击 <a href="https://jq.qq.com/?_wv=1027&k=fWtpTWBM">蓝色字体</a> 自取,我都放在这里了。</p><h2><a id="_289">;</a>尾语</h2><p>要成功,先发疯,下定决心往前冲!</p><p>学习是需要长期坚持的,一步一个脚印地走向未来!</p><p>未来的你一定会感谢今天学习的你。</p><p>—— 心灵鸡汤</p><p>本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝</p><p><img src="https://img-blog.csdnimg.cn/e015446cc0c348da94b9dd8c577ccfae.gif"></p><p class="node-read-div2p">👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇</p>
Original: https://blog.csdn.net/python56123/article/details/127394684
Author: 魔王不会哭
Title: python驾到~障碍通通闪开,美女批量入内存~
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/673774/
转载文章受原作者版权保护。转载请注明原作者出处!