网页视频抓取脚本(第一次尝试爬取—[Python爬虫]爬虫实例:三种方式爬取PEXELS)
优采云 发布时间: 2022-04-16 12:05网页视频抓取脚本(第一次尝试爬取—[Python爬虫]爬虫实例:三种方式爬取PEXELS)
第一次尝试爬取—>【Python爬虫】爬虫示例:爬取PEXELS图片的三种方式
在爬PEXELS的时候,遇到了这样一个问题:
页面使用Ajax的异步加载技术来实现分页,因此无法通过request.text获取动态加载的内容。如果要正确获取数据,则需要使用称为逆向工程(“数据包捕获”)的过程。PS:如果你对上面的文字感到困惑,那么你可以阅读下面的例子和解释来做一个基本的了解。
例如:在PEXELS上看猫电影,虽然我们在浏览器中看到很多图片,如图:
但是使用响应中可以爬取的下载链接只有这个:
意思是网站的每一页只刷新15张图片,每次向下拖动滚动条,又刷新15张图片。
异步加载说明
传统网页如果需要更新内容,必须重新加载整个网页,网页加载速度慢,用户体验差,数据传输少,会造成带宽浪费。异步加载技术 (AJAX) 是指一种创建交互式 Web 应用程序的方法。网络开发技术。通过在后台与服务器交换少量数据,AJAX 可以使网页异步更新。这意味着可以在不重新加载整个网页的情况下更新部分网页。
逆向工程说明
因为使用异步加载技术后,不再需要立即加载所有网页内容然后返回响应,因此显示的新内容不再在 HTML 源代码中,无法捕获这些新数据。所以我们需要通过网页数据的异步加载方式来捕捉这些,就需要了解网页是如何加载数据的。这个过程称为逆过程。
逆向工程实践
通过逆向工程,可以找到网页新加载的数据和对应的新页面,用于设计新的爬虫代码。
打开网页,按F12打开开发者工具,选择Network选项卡,找到并点击XHR,然后向下拖动滚动条,可以发现右侧刷新了一些新文件,如图:
点击第一个文件可以看到Headers请求的URL,03:21:06 +0000
然后点击响应
将内容复制到文本
这不是我要抓取的图片地址吗?
03:21:06 +0000
猜想上面的URL会由?page=2改为page=x来获取第x页的信息,删除以下内容后直接访问是没有问题的:
这样,我们就得到了需要爬取的网页。
印证了之前的结论,每页刷新15张图片。
既然知道了网页的地址,爬虫修改它就很方便了。
爬虫代码
<p>import requests
import re
import time
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/67.0.3396.79 Safari/537.36'
}
def pic_scratch(url):
res = requests.get(url, headers)
links = re.findall('<a href=\"(.*)\" download>', res.text)
for link in links:
pic = requests.get(link, headers)
pic_name = re.search('(?