当前位置: 首页 > news >正文

爬取头像的程序不好用了?那就再重新做一份咯

需求分析

今天,突然有一个粉丝找到我说,“仙草哥哥,今天是开学的第一天,有一句话怎么说的来着,新学期,新气象,我也想换一个新头像。但是呢,之前你那个爬取头像的程序,不知道为什么不能用了,现在我又没有头像可以用了,怎么办呢?”

我一看,原来是前两个月更新的文章,妹子天天要换新头像?没问题,通过爬虫爬取精美头像,这里面的爬虫程序因为版本更新的缘故,现在已经不能够使用了,这怎么办呢?没关系,再重新写一份就好咯

有了上次的经验,这次的程序制作也没什么困难的,大体上的技术和上次是一样的,只要跟着模仿,就能够做出一份好的爬取头像的程序啦

实现分析

毫无疑问,本次也是使用python的requests库,这个非常方便,至于数据提取,我最近使用比较多的是parsel库,它确实是非常的好用,但是呢,由于上次我们使用的是lxml库,本次为了能够与上次的程序的运行环境兼容,同样也是使用了lxml库来进行数据的提取

lxml库的使用和parsel稍微有所不同,我们假如得到的html的响应为html,那么,使用lxml应该像这样

from lxml import etree

html = etree.HTML(html)

html.xpath()

改为使用parsel的话,应该像这样

from parse import Selector

html = Selector(html)

html.xpath()

可以看到,基本的使用是没什么区别的,只是一个是etree.HTML(),另一个是parsel.Selector()

完整代码展示

import time
import requests
from base64 import B64decode
from lxml import etree

headers = {"user-agent": "Mozilla/5.0"}
url = B64decode("aHR0cHM6Ly93d3cud295YW9nZXhpbmcuY29tL3RvdXhpYW5nLw==").decode()

r = requests.get(url, headers=headers)
r.encoding = "utf-8"

html = etree.HTML(r.text)

divs = html.xpath("//div[@class='txList ']")
for div in divs:
    title = div.xpath("./a/@title")[0] + ".png"
    u = "http:" + div.xpath(".//img[@class='lazy']/@src")[0]
    with open(title, "wb") as f:
        r = requests.get(u)
        content = r.content
        f.write(content)
    print(title + "已完成")
    time.sleep(1)

程序运行后,我们就可以看到,好看的头像已经爬取完成了

 从这里我们也可以看出,好看的头像真的是非常的好看啊


 好消息,好消息,炎热的夏天终于算是过完了,9月份的天气总算是稍稍凉爽了一些,我感觉我自己也可以开始正常更新文章了,真是可喜可贺。也希望大家多多支持哦,欢迎点赞收藏,关注我,每天带你用新的爬虫程序

相关文章:

  • 常见的三种池化操作:MaxPool2d/AdaptiveMaxPool2d/AvgPool2d/AdaptiveAvgPool2d...(Pytorch)
  • Java 面试八股文 —— SSM 框架常见面试题
  • Tomcat的安装与优化
  • 第三章 神经网络——什么是神经网路激活函数3层神经网络的简单实现手写数字识别
  • 隧道调频广播覆盖-天线分布式部署是隧道调频广播无线覆盖系统设备介绍
  • 2022-8-31 第七小组 学习日记 (day55)JSP
  • 全球与中国吸油烟机行业市场规模调研及未来前瞻报告2022-2028年
  • 金仓数据库KingbaseES客户端应用参考手册--14. sys_receivewal
  • 软件测试自学不知道如何下手?一篇文章7个步骤带你找准方向
  • 金仓数据库KingbaseES客户端应用参考手册--15. sys_restore
  • map函数传入parseInt函数处理数字输出有误
  • C++ 小游戏 视频及资料集(9)
  • git--查看信息的命令--使用/实例
  • 中秋味的可视化大屏 【以python pyecharts为工具】
  • nodejs+vue+elementui办公用品电商家具网站python
  • [Vue CLI 3] 配置解析之 css.extract
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 2019年如何成为全栈工程师?
  • cookie和session
  • express如何解决request entity too large问题
  • hadoop集群管理系统搭建规划说明
  • js 实现textarea输入字数提示
  • js对象的深浅拷贝
  • Nodejs和JavaWeb协助开发
  • python 装饰器(一)
  • React-Native - 收藏集 - 掘金
  • React组件设计模式(一)
  • Vue学习第二天
  • 基于webpack 的 vue 多页架构
  • 理清楚Vue的结构
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 三栏布局总结
  • 数组大概知多少
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 再次简单明了总结flex布局,一看就懂...
  • ionic异常记录
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • linux 淘宝开源监控工具tsar
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 数据库巡检项
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 反射的使用
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [ 数据结构 - C++] AVL树原理及实现
  • [].slice.call()将类数组转化为真正的数组