爬虫代码已复制

Python爬虫实战C01爬虫实战练习案例解析

1738756036阅读数:216
上一篇:C01-爬虫实战示例代码
下一篇:HTMX + Flask 实现用户登录:动态交互的完整教程

这是一个新的系列,与以往不同的是,之前的练习都会提示了大家网页用了什么反爬措施,目的是让大家先熟悉一下爬虫与反爬虫的套路。渐渐地有更多的小伙伴向我提出疑问:分析网页的反爬虫措施都是靠猜的吗?

以上问题的答案是一定程度上是肯定的,确实要靠感觉。这感觉哪里来呢?大家把之前的练习都做了一遍两遍三遍甚至更多遍都没感觉出什么来。

其中这中间一个细节影响了大家:就是大家都跳过了总结累积经验的步骤,都是直接按照提示去练的。不是说这个思路是错的,相反,这个思路是对的,现在是大家已经开始追求更高层面的知识了。

所以就推出了爬虫实战练习系列,这个系列就是贴近爬虫实战,让大家从0开始分析网页、编写爬虫代码、调试爬虫等等。提醒大家这个过程一定要亲自动手,认真对待,不要为了爬而爬,这样是累积不到经验的。因为只有亲自动手试了才能感受到爬虫开发的思路跟其中的细节,才会在脑子里形成经验。实在分析不出来的也没关系,我们也提供了简单的提示,但建议不到万不得已不要去看提示。

言归正传,开始C01的爬虫实战案例解析。

打开Python爬虫实战练习C01页面 爬虫实战练习C01,看到页面上描述的爬虫目标是 TensorFlow mnist 数据集。

往下滚动页面,可以看到 mnist 是一个链接,点击打开了一个新的页面,新的页面展示了数据集,这里就是我们的爬虫目标。在页面上右键 -> 显示网页源代码,发现 HTML 源码也很简单。

我们就使用 Python 的 requests 库爬取网页,并使用 lxml 库来解析网页。

在实际的爬虫开发过程中,为了提高爬虫的可行性,通常都会至少直接上 HTTP Headers 三件套:User-Agent、Referrer、Cookie。所以我们通过快捷键 F12 打开浏览器开发都工具,刷新 mnist 页面拿到以上的三个值。方法在前面的练习的视频教程中都有讲过,这里就不再重复了。

只是其中的 Cookie 的值,在浏览器开发者工具里会有多个,简单粗暴的方法就是都贴到代码了,如果想要优雅一点应该如何判断要取哪个值呢。

其中这个问题的答案在之前的视频里也有讲过:Cookie 通常是由服务器生成并通过 HTTP Headers 的 Set-Cookie 传递给浏览器的,所以我们现在涉及到的两个页面都刷新一下,找到有 Set-Cookie 的值就是我们爬虫要传回服务器的值了。而且连续刷新几遍 Cookie 的值都没有变化,说明它是固定的,不需要动态处理。

这时候就可以直接编写爬虫代码了:

# coding=utf-8

import requests
from lxml import etree
import numpy as np

base_url = 'https://spiderbuf.cn/playground/c01/mnist'

my_headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36',
    'Referer': 'https://spiderbuf.cn/playground/c01',
    'Cookie': '__cgf3t=G0gzgFKDRlLtmZH7NrzqOb1x4pek1xNQk12KKc4g21Y-1731624199;'}


html_bytes = requests.get(base_url, headers=my_headers).content
html = html_bytes.decode()
print(html)

然后根据 <tbody> 提取 Pix1 列的值并使用 numpy 库的 mean 函数计算平均值,再四舍五入到两位小数。把计算结果填写到 爬虫结果校验 校验一下爬取下来的数据是否正确。

完整示例代码:爬虫源码