IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 他说:“只是单纯的想用Python收集一些素颜照,做机器学习使用”,“我信你个鬼!” -> 正文阅读

[Python知识库]他说:“只是单纯的想用Python收集一些素颜照,做机器学习使用”,“我信你个鬼!”

今天,他爬取了 上千张 相亲素颜照。跟我说?刷相亲平台,收集素颜照,训练机器模型。这也能信?
她们明明化妆了。

阅读本文你将收获

  1. 近万张素颜头像;
  2. lxml 解析库初识;
  3. XPath 语法初识;
  4. Cooike 反爬;
  5. 女朋友(没准是意外收获)

Python 采集 19 楼相亲女生头像

从本篇博客开始,你将进入爬虫 120 例的第二个小阶段,requests + lxml 实现爬虫。

requests 相信通过前面 10 个案例,你已经比较熟悉了,接下来我们在其基础上,新增一款爬虫解析库 lxml。该库主要用于 XMLHTML 的解析,而且解析效率非常高,使用它之后,你就可以摆脱编写正则表达式的烦恼了。

目标数据源分析

爬取目标网站

本次抓取目标是 19 楼女生相亲频道,该分类频道截止 7 月 1 日还在持续更新中。

https://www.19lou.com/r/1/19lnsxq.html

以下图片来自网页截图,如有侵权,及时联系橡皮擦哦~

他说:“只是单纯的想用Python收集一些素颜照,做机器学习使用”,“我信你个鬼!”

本次爬取的目标为上图头像图片,文件名保存为标题内容。

使用的 Python 模块

  • requests 模块
  • lxml 模块
  • fake_useragent 模块

重点学习内容

lxml 模块初识。

列表页分析

本次抓取围绕列表页即可完成任务,列表页排序规则如下:

https://www.19lou.com/r/1/19lnsxq.html
https://www.19lou.com/r/1/19lnsxq_2.html
https://www.19lou.com/r/1/19lnsxq-233.html

图片所在标签如下所示,提取工作交给 lxml 模块完成,当然为了联系熟练程度,你依旧可以使用 re 模块完成一版。

他说:“只是单纯的想用Python收集一些素颜照,做机器学习使用”,“我信你个鬼!”
lxml 基础知识

提前通过 pip install lxml 对该库完成安装。

导入该库与该库的基本使用。

from lxml import etree
html = "一点HTML代码"
#生成一个 XPath 对象
html=etree.HTML(text)
# 提取数据
html.xpath('//li/a')

上述代码注释中提及的 XPath 对象,关于 XPath,是一门在 XML/HTML 文档中查找信息的语言,大意为通过特定语法在 HTML 中提取数据的语言,基础知识的学习,可以参考 https://www.w3school.com.cn/xpath/xpath_intro.asp,最佳的学习技巧是边查边用。

整理需求如下

  1. 批量生成待抓取列表页;
  2. requests 请求目标数据;
  3. lxml 提取目标数据;
  4. 保存图片。

编码时间

在编码时,为了防止直接被反爬识别,所在爬取过程中,增加一个等待时间,限制爬取速度(当然在后续发现没有对 IP 的限制,直接移除即可)。

代码编写过程中,如果出现如下错误,更新 fake_useragent 即可。

raise FakeUserAgentError('Maximum amount of retries reached')

更新脚本如下:

pip install -U fake-useragent

如果依旧失败,建议自己写随机生成 UserAgent 的函数。

一点点反爬

爬取该目标数据时,直接通过 requests 请求目标地址,会返回如下代码,该代码不是目标数据所在页面,即网站存在反爬技术。

直接请求目标网址,得到的响应代码如下图所示,注意红框位置。
他说:“只是单纯的想用Python收集一些素颜照,做机器学习使用”,“我信你个鬼!”

requests 请求到的数据进行分析,发现在返回的代码中设置了 Cookie,该值进行反复测试之后,发现为固定值,后续直接通过 requests 参数 headers 设置即可。

获取到目标页面源码之后,就可以通过 lxml 进行页面提取操作了,在前文已经进行了简单的描述。重点学习的分为两个部分内容:

  1. 首先通过 lxml 模块中的 etree 对象,将 HTML 源码进行序列化,即转化为 Element 对象;
  2. 然后对 Element 对象进行解析,这里用到的解析语法是 XPath,本文用到了路径解析,在完整代码部分有注释说明。

完整代码

import requests
from lxml import etree
from fake_useragent import UserAgent
import time


def save(src, title):
    try:
        res = requests.get(src)
        with open(f"imgs/{title}.jpg", "wb+") as f:
            f.write(res.content)
    except Exception as e:
        print(e)


def run(url):
    # ua = UserAgent(cache=False)
    ua = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36"
    headers = {
        "User-Agent": ua,
        "Host": "www.19lou.com",
        "Referer": "https://www.19lou.com/r/1/19lnsxq-233.html",
        "Cookie": "_Z3nY0d4C_=37XgPK9h"  # 从反爬代码中获取到的值
    }
    try:
        res = requests.get(url=url, headers=headers)
        text = res.text
        # 将 html 转换成 Element 对象
        html = etree.HTML(text)
        # xpath 路径提取 @class 为选取 class 属性
        divs = html.xpath("//div[@class='pics']")
        # print(len(divs))
        # 遍历 Elements 节点
        for div in divs:
            # 提取地址,注意提取的属性为 data-src 而不是 src
            src = div.xpath("./img/@data-src")[0]
            # 提取标题
            title = div.xpath("./img/@alt")[0]
            save(src, title)
    except Exception as e:
        print(e)


if __name__ == '__main__':
    urls = ["https://www.19lou.com/r/1/19lnsxq.html"]
    for i in range(114, 243):
        urls.append(f"https://www.19lou.com/r/1/19lnsxq-{i}.html")
    for url in urls:
        print(f"正在抓取{url}")
        run(url)
        # time.sleep(5)

    print("全部爬取完毕")

为了提高效率,你可以取消 5 秒等待,也可以采用多线程,不过尝试几秒钟就好了,不要过度抓取哦,毕竟咱们只为学习。

上述代码还存在一个重要知识点,在获取到的源码中图片的 src 属性为 dot.gif(加载图片),data-src 属性存在值。

具体对比如下图所示,上图为直接查看页面源码,下图为服务器直接返回源码。

这部分给我们的爬取提示为,任何数据的解析提取,都要依据服务器直接返回的源码。

他说:“只是单纯的想用Python收集一些素颜照,做机器学习使用”,“我信你个鬼!”

抓取结果展示时间

爬虫 120 例,第 11 例完成,希望本篇博客能带给你不一样的惊喜与知识。相关资料可以在下面直接获取。

他说:“只是单纯的想用Python收集一些素颜照,做机器学习使用”,“我信你个鬼!”

完整代码下载地址:https://codechina.csdn.net/hihell/python120,NO11。

以下是爬取过程中产生的各种学习数据,如果只需要数据,可去下载频道下载~。

爬取资源仅供学习使用,侵权删。

抽奖时间

上篇博客获奖的朋友 ID 为 m0_59785054,抓紧联系橡皮哦。
他说:“只是单纯的想用Python收集一些素颜照,做机器学习使用”,“我信你个鬼!”

评论数过 100,随机抽取一名幸运读者,
获取 29.9 元《Python 游戏世界》专栏 1 折购买券一份,只需 2.99 元。

今天是持续写作的第 174 / 200 天。可以关注我,点赞我、评论我、收藏我啦。

相关阅读

  1. 10 行代码集 2000 张美女图,Python 爬虫 120 例,再上征途
  2. 熊孩子说“你没看过奥特曼”,赶紧用 Python 学习一下,没想到
  3. 我用 Python 连夜离线了 100G 图片,只为了防止网站被消失
  4. 5000 张高清壁纸大图(手机用),用 Python 在法律的边缘又试探了一把
  5. 爬动漫“上瘾”之后,放弃午休,迫不及待的用 Python 薅了腾讯动漫的数据,啧啧啧
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-04 21:15:28  更:2021-07-04 21:15:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 7:30:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码