32. 实战:PyQuery实现抓取TX图文新闻

2023-11-20

目录

前言                (链接在评论区)(链接在评论区)(链接在评论区)

目的                (链接在评论区)(链接在评论区)(链接在评论区)

思路                ​​​​​​​(链接在评论区)(链接在评论区)(链接在评论区)

代码实现

1. 拿到页面源代码

2. 解析html文件

3. 拿到标题和内容

4. 下载图片

5. 保存文件

完整代码

运行效果

​编辑

总结


前言

我们之前提到PyQuery区别于其他几种解析方式的最大优势就是可以“修改源代码”从而便于我们提取信息。今天我们以TX新闻为例,对这个解析的优势作一个简要的介绍。


目的

利用Pyquery+Markdown抓取TX新闻的某一篇完整图文内容,并保存到本地md文件。


思路

1. 拿到页面源代码

2. 解析html文件

3. 拿到标题和内容

4. 下载图片

5. 保存文件


代码实现

1. 拿到页面源代码

# main函数,完成所有操作(url普适)
def main():
    url = '见评论区'
    resp = requests.get(url)
    html = resp.text
    title, essay = get_content(html)
    save_file(title, essay)

main函数中拿到url的源代码,并传入get_content函数中获取标题和内容以及图片,最后调用save_file函数保存文件到本地。 

2. 解析html文件

# 拿到标题和内容
def get_content(html):
    p = pq(html)

开始讲解 get_content函数,第一步就是先用PyQuery解析主函数中传入的html源代码。

3. 拿到标题和内容

随后解析出标题和内容。观察源代码发现只有一个h1标签,那么直接拿出来,随后可以写到markdown文件中。而文章内容部分就比较复杂了,我们要实现的是从本地读取图片,那么势必要先将图片下载到本地,那么就再建立一个download_img函数。

    title = p("h1")
    # print(title)
    essay = p("p.one-p")
    ps = essay("img").items()
    for p in ps:
        img_src = p.attr("src")
        img_uuid = uuid.uuid4()
        download_img(img_src, img_uuid)
        p.attr("src", f"1_img_src/{img_uuid}.jpg")  # 将图片资源地址改为本地
        p.attr("alt", "Image Not Found")
        # print(essay)
    return title, essay

注意这行代码

p.attr("src", f"1_img_src/{img_uuid}.jpg")  # 将图片资源地址改为本地
p.attr("alt", "Image Not Found")

这两行的含义就是在每一行具有img标签的p标签里面,将src属性替换为本地路径,并添加一个alt属性来作为图片无法显示时的替换文本。

这里就体现了PyQuery的优越性

4. 下载图片

# 下载图片,保存到本地指定路径,用同一个uuid
def download_img(img_src, img_uuid):
    download_url = 'https:' + img_src
    img_resp = requests.get(download_url)
    file_path = f"1_img_src/{img_uuid}.jpg"
    with open(file_path, mode='wb') as f:
        f.write(img_resp.content)

常规操作不赘述,注意区分这里的img_src/img_uuid的区别 

5. 保存文件

# 保存Markdown文件
def save_file(title, essay):
    true_title = title.text()
    with open(f"1_{true_title}.md", mode='w', encoding='utf-8') as f:
        f.write(str(title))
        f.write(str(essay))

完整代码

"""
PyQuery & Markdown
new.xx.com(见评论区)
"""

from pyquery import PyQuery as pq
import requests
import uuid


# main函数,完成所有操作(url普适)
def main():
    url = '见评论区'
    resp = requests.get(url)
    html = resp.text
    title, essay = get_content(html)
    save_file(title, essay)


# 拿到标题和内容
def get_content(html):
    p = pq(html)
    title = p("h1")
    # print(title)
    essay = p("p.one-p")
    ps = essay("img").items()
    for p in ps:
        img_src = p.attr("src")
        img_uuid = uuid.uuid4()
        download_img(img_src, img_uuid)
        p.attr("src", f"1_img_src/{img_uuid}.jpg")  # 将图片资源地址改为本地
        p.attr("alt", "Image Not Found")
        # print(essay)
    return title, essay


# 下载图片,保存到本地指定路径,用同一个uuid
def download_img(img_src, img_uuid):
    download_url = 'https:' + img_src
    img_resp = requests.get(download_url)
    file_path = f"1_img_src/{img_uuid}.jpg"
    with open(file_path, mode='wb') as f:
        f.write(img_resp.content)


# 保存Markdown文件
def save_file(title, essay):
    true_title = title.text()
    with open(f"1_{true_title}.md", mode='w', encoding='utf-8') as f:
        f.write(str(title))
        f.write(str(essay))


if __name__ == '__main__':
    main()

运行效果

 

由于PyCharm中相对路径的图片在md文件中无法正常显示,所以我们拿VSCode来做演示,目前还没有找到解决办法...有知道的大佬可以在评论区或者私信告知我一下,谢谢! 


总结

本节我们学习认识了用PyQuery修改html源代码从而能够改变html传递的信息,帮助我们更方便的获取并解析信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

32. 实战:PyQuery实现抓取TX图文新闻 的相关文章

随机推荐

  • 面试题:StringBuilder 和 StringBuffer 区别(通俗易懂易背)

    StringBuffer是同步的 线程安全 StringBuilder不是 什么时候用哪一个 StringBuilder 当您需要一个可以修改的字符串 并且只有一个线程正在访问和修改它时 StringBuffer 当你需要一个可以修改的字符
  • sql: Compare Tables

    使用 UNION INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式 select from BookInfoList 存在不同的 select BookInfoID BookInfoBarCod
  • VMware安装OpenEuler

    VMware安装OpenEuler 需要考虑的因素 安装系统的用途 桌面开发 服务器 Linux学习使用 磁盘分区规划 最小120G 划分 boot swap 根分区等 网络 是否对外提供服务 NAT模式 桥接模式 仅主机模式 1 下载镜像
  • 前端大屏常用的适配方案

    假设我们正在开发一个可视化拖拽的搭建平台 可以拖拽生成工作台或可视化大屏 或者直接就是开发一个大屏 首先必须要考虑的一个问题就是页面如何适应屏幕 因为我们在搭建或开发时一般都会基于一个固定的宽高 但是实际的屏幕可能大小不一 接下来我们就尝试
  • 安卓10开机时间优化分析

    本文从以下六点分析开机时间 1 软件环境 2 开机时间测试方法 3 开机各阶段重要的时间节点 4 bootchart工具使用说明 5 Android开机时间日志信息 6 开机时间优化方案 一 软件环境 平台 android10 0 qcom
  • Stem教育是探究式的学习方式

    在国家政策的扶持下 STEM教育慢慢进入大众的视野 走近一部分大中小学生的课堂 教育部出台的 教育信息化 十三五 规划 中明确指出有效利用信息技术推进 众创空间 建设 探索STEM教育 创客教育等新教育模式 使学生具有较强的信息意识与创新意
  • virtualbox 3.0.8 下载

    http download virtualbox org virtualbox 3 0 8
  • java命令执行jar包main方法指定相关依赖

    1 准备好工程执行所需的所有依赖jar包 也可以使用maven导出依赖的方法导出 2 将工程打包 此处打成jar包 如上图所示 zookeeper learn 1 0 SNAPSHOT jar 本次需要jdk java命令执行的jar包 3
  • #互联网生活中的隐私保护:用隐私换便利还是花钱护隐私?# 隐私保护与个人信息安全:在便利与隐私之间的取舍

    文章目录 1 看法 2 互联网生存指南 通过哪些方法来加强个人信息保护 2 1 加强个人信息安全意识 2 2 使用强密码和多因素认证 2 3 更新操作系统和软件 2 4 谨慎使用公共Wi Fi网络 2 5 定期备份个人数据 2 6 注意社交
  • Qt之自定义布局管理器(QBorderLayout)

    简述 QBorderLayout 顾名思义 边框布局 实现了排列子控件包围中央区域的布局 具体实现要求不再赘述 请参考前几节内容 简述 实现效果源码 使用 实现 QBorderLayout主要采用QLayout和QWidgetItem实现
  • MySQL 代替in/not in 的sql语句

    1 in和exists in是把外表和内表作hash连接 而exists是对外表作loop循环 每次loop循环再对内表进行查询 一直以来认为exists比in效率高的说法是不准确的 如果查询的两个表大小相当 那么用in和exists差别不
  • Textbooks Are All You Need

    本文是LLM系列文章 针对 Textbooks Are All You Need 的翻译 课本是你全部所需要的 摘要 1 引言 2 训练细节和高质量数据的重要性 3 对CodeExercise进行微调后的模型能力峰值 4 LLM评分对非常规
  • 【Python高级之定时器】

    Python高级之定时器 定时器 定时器 如果需要使用定时器去触发一些事件 Python中通过线程实现定时器timer 定时器的意思也是 一段时间后调用一个函数 用法 import threading def fun timer print
  • …\OBJ\LED.axf: Error: L6218E: Undefined symbol EXTI_Init (referred from exti.o). 错误修改

    OBJ LED axf Error L6218E Undefined symbol EXTI Init referred from exti o 错误修改 今天在移植野火的程序到元子的开发平台上时候 发现自己在中断初话中断函数的时候出现了
  • 【C语言】 函数

    函数 在计算机科学中 子程序 一个大型程序中的某部分代码 由一个或多个语句块组 成 它负责完成某项特定任务 而且相较于其他代 码 具备相对的独立性 一般会有输入参数并有返回值 提供对过程的封装和细节的隐藏 这些代码通常被集成为软 件库 C语
  • 深度学习目标跟踪算法

    ECCV 2022 OSTrack Joint Feature Learning and Relation Modeling for Tracking https blog csdn net qq 41442511 article deta
  • osgEarth的Rex引擎原理分析(七十)TileRenderModel中的RenderingPass和RenderBindings

    目标 五十五 中的问题141 TileRenderModel中的RenderingPass和RenderBindings RenderingPass渲染通道主要存放Samplers采样器列表 采样器存放的是用来渲染影像 高程的纹理和矩阵 R
  • 配置pysot- toolkit

    这个大家都没遇见啥困难 但是我就踩了比较多雷 作者的github库 不是我的 https github com StrangerZhang pysot toolkit 安装步骤 参考链接会放在后面 需要的环境 我是在Windows下配置的
  • Latex符号表——文本/数学模式通用符号

    目录 简介 速览图 详细列表 简介 这篇博客用来记录文本 数学模式通用符号 这些符号可用于文本和数学模式 速览图 详细列表 符号 命令
  • 32. 实战:PyQuery实现抓取TX图文新闻

    目录 前言 链接在评论区 链接在评论区 链接在评论区 目的 链接在评论区 链接在评论区 链接在评论区 思路 链接在评论区 链接在评论区 链接在评论区 代码实现 1 拿到页面源代码 2 解析html文件 3 拿到标题和内容 4 下载图片 5