python爬取网站内容写入xls

news2025/1/13 9:29:35

 目标

现需要对下面网站资源进行爬取,文学人物-名人明星网

  • 获取人物名字
  • 获取人物头像
  • 获取人物简介

资源获取 

通过requests库,我们可以让 Python 程序向浏览器一样向 Web 服务器发起请求,并接收服务器返回的响应,从响应中我们就可以提取出想要的数据。浏览器呈现给我们的网页是用HTML 编写的,浏览器相当于是 HTML 的解释器环境,我们看到的网页中的内容都包含在 HTML 的标签中。在获取到 HTML 代码后,就可以从标签的属性或标签体中提取内容。

for page in range(1, 3):
    resp = requests.get(
        url=f'https://www.hhwl88.com/type/literature.html?page={page}',
        # 如果不设置HTTP请求头中的User-Agent,网站可能会检测出不是浏览器而阻止我们的请求。
        # 通过get函数的headers参数设置User-Agent的值,具体的值可以在浏览器的开发者工具查看到。
        # 用爬虫访问大部分网站时,将爬虫伪装成来自浏览器的请求都是非常重要的一步。
        headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                               'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'}
    )
    text = resp.text

    # 匹配到人名并写入xls
    # a href="/people/suxun/" title="苏洵" rel="nofollow" target="_blank">
    # <img src="https://img.hhwl88.com/upload/people/2022/11/04/648b7d0604a8fd2edb778a2fbe79752d.jpg" alt="苏洵" /></a>
    pattern1 = re.compile(
        r'<a href=".*?" title="(.*?)" rel="nofollow" target="_blank"><img src=".*?" alt=".*?" /></a>')
    titles = pattern1.findall(text)

保存资源

    # 写入xls
    f = xlwt.Workbook('encoding = utf-8')
    sheet1 = f.add_sheet('文学', cell_overwrite_ok=True)
    for i in range(len(titles)):
        sheet1.write(20*i + (page-1)*50*20, 0, titles[i])
    f.save('C:\\Users\\Administrator\\Desktop\\test.xls')

除了文本内容,我们也可以使用requests库通过 URL 获取二进制资源。下面演示了如何获取头像链接并下载保存到本地文件中。

    for i in range(len(imgs)):
        # 图片下载到本地
        resp = requests.get(imgs[i])
        img_name = 'literature' + str(i) + '.jpg'
        with open(img_name, 'wb') as file:
            file.write(resp.content)
由于xlwt插入图片只支持bitmap插入,需要将jpg转bitmap
    for i in range(len(imgs)):
        # 图片下载到本地
        resp = requests.get(imgs[i])
        img_name = 'literature' + str(i) + '.jpg'
        with open(img_name, 'wb') as file:
            file.write(resp.content)
            try:
                # xlwt只支持bitmap插入,jpg转bitmap
                img = Image.open(img_name)
                image_parts = img.split()
                r = image_parts[0]
                g = image_parts[1]
                b = image_parts[2]
                img = Image.merge("RGB", (r, g, b))
                fo = BytesIO()
                img.save(fo, format='bmp')
                sheet1.insert_bitmap_data(fo.getvalue(), 1+20*i + (page-1)*50*20, 1, scale_x=0.5, scale_y=0.5)
                img.close()
            except:
                sheet1.write(20*i + 1 + (page-1)*50*20, 1, imgs[i])  # 写入数据参数对应 行, 列, 值
    f.save('C:\\Users\\Administrator\\Desktop\\test.xls')  # 保存.xls到当前工作目录

获取到的网络资源如下

爬虫代码

import random
import re
import time
import requests
import xlwt
from PIL import Image
from io import BytesIO

# xls新建sheet
f = xlwt.Workbook('encoding = utf-8')
sheet1 = f.add_sheet('business', cell_overwrite_ok=True)

for page in range(1, 3):
    resp = requests.get(
        url=f'https://www.hhwl88.com/type/business.html?page={page}',
        # 如果不设置HTTP请求头中的User-Agent,网站可能会检测出不是浏览器而阻止我们的请求。
        # 通过get函数的headers参数设置User-Agent的值,具体的值可以在浏览器的开发者工具查看到。
        # 用爬虫访问大部分网站时,将爬虫伪装成来自浏览器的请求都是非常重要的一步。
        headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                               'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'}
    )
    text = resp.text

    # 匹配到人名并写入xls
    # a href="/people/suxun/" title="苏洵" rel="nofollow" target="_blank">
    # <img src="https://img.hhwl88.com/upload/people/2022/11/04/648b7d0604a8fd2edb778a2fbe79752d.jpg" alt="苏洵" /></a>
    pattern1 = re.compile(
        r'<a href=".*?" title="(.*?)" rel="nofollow" target="_blank"><img src=".*?" alt=".*?" /></a>')
    titles = pattern1.findall(text)
    # # 写入xls
    # f = xlwt.Workbook('encoding = utf-8')
    # sheet1 = f.add_sheet('business', cell_overwrite_ok=True)
    for i in range(len(titles)):
        sheet1.write(20*i + (page-1)*50*20, 0, titles[i])
    # f.save('C:\\Users\\Administrator\\Desktop\\test.xls')

    # 匹配到头像并写入xls
    # a href="/people/suxun/" title="苏洵" rel="nofollow" target="_blank">
    # <img src="https://img.hhwl88.com/upload/people/2022/11/04/648b7d0604a8fd2edb778a2fbe79752d.jpg" alt="苏洵" /></a>
    pattern2 = re.compile(r'<a href=".*?" title=".*?" rel="nofollow" target="_blank"><img src="(.*?)" alt=".*?" /></a>')
    imgs = pattern2.findall(text)
    for i in range(len(imgs)):
        # 图片下载到本地
        resp = requests.get(imgs[i])
        img_name = 'business' + str(i) + '.jpg'
        with open(img_name, 'wb') as file:
            file.write(resp.content)
            try:
                # xlwt只支持bitmap插入,jpg转bitmap
                img = Image.open(img_name)
                image_parts = img.split()
                r = image_parts[0]
                g = image_parts[1]
                b = image_parts[2]
                img = Image.merge("RGB", (r, g, b))
                fo = BytesIO()
                img.save(fo, format='bmp')
                sheet1.insert_bitmap_data(fo.getvalue(), 1+20*i + (page-1)*50*20, 1, scale_x=0.5, scale_y=0.5)
                img.close()
            except:
                sheet1.write(20*i + 1 + (page-1)*50*20, 1, imgs[i])  # 写入数据参数对应 行, 列, 值
                print('faile')
    # f.save('C:\\Users\\Administrator\\Desktop\\test.xls')  # 保存.xls到当前工作目录

    # 人物描述写入xls
    pattern3 = re.compile(r'<span class="desc">(.*?)</span>')
    decs = pattern3.findall(text)
    for i in range(len(decs)):
        sheet1.write(20*i + (page-1)*50*20, 1, decs[i])
    # f.save('C:\\Users\\Administrator\\Desktop\\test.xls')

    # 随机休眠1-5秒,避免爬取页面过于频繁
    time.sleep(random.random() * 4 + 1)

f.save('C:\\Users\\Administrator\\Desktop\\test.xls')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1471077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python爬虫-爬取B站番剧封面

本文是本人最近学习Python爬虫所做的小练习。如有侵权&#xff0c;请联系删除。 页面获取url 代码 import requests import os import re# 创建文件夹 path os.getcwd() /images if not os.path.exists(path):os.mkdir(path)# 当前页数 page 1 # 总页数 total_page 2# 自动…

【文生视频】Diffusion Transformer:OpenAI Sora 原理、Stable Diffusion 3 同源技术

文生视频 Diffusion Transformer&#xff1a;Sora 核心架构、Stable Diffusion 3 同源技术 提出背景输入输出生成流程变换器的引入Diffusion Transformer (DiT)架构Diffusion Transformer (DiT)总结 OpenAI Sora 设计思路阶段1: 数据准备和预处理阶段2: 架构设计阶段3: 输入数据…

sql-labs第46关(order by盲注脚本)

一、环境 网上有自己找 二、解释 order by 注入我们看他的true和false来进行注入出来 二、实操 让我们用sort 看看源码 最终我们的id是放到order by后面了 如果我们直接用列去排序 ?sortusername/password username&#xff1a; password&#xff1a; 可以看到顺序是不…

云原生之容器编排实践-ruoyi-cloud项目部署到K8S:MySQL8

背景 前面搭建好了 Kubernetes 集群与私有镜像仓库&#xff0c;终于要进入服务编排的实践环节了。本系列拿 ruoyi-cloud 项目进行练手&#xff0c;按照 MySQL &#xff0c; Nacos &#xff0c; Redis &#xff0c; Nginx &#xff0c; Gateway &#xff0c; Auth &#xff0c;…

【数据库】MySQL视图 | 用户管理

文章目录 1 :peach:视图:peach:1.1 :apple:基本使用:apple:1.1.1 :lemon:创建视图:lemon:1.1.2 :lemon:案例:lemon:1.1.3 :lemon:删除视图:lemon: 1.2 :apple:视图规则和限制:apple: 2 :peach:用户管理:peach:2.1 :apple:用户信息:apple:2.2 :apple:创建用户:apple:2.3 :apple:…

Sovit3D数字孪生平台 助力智慧海上风电场项目加速

我们常说地球是蓝色星球&#xff0c;那是因为海洋约占地球面积的71%。如今&#xff0c;我国正在向“双碳”目标不断奋斗&#xff0c;海上风电也作为一种潜力清洁能源&#xff0c;迸发出前所未有的活力&#xff0c;海上吹来的风成为未来清洁能源新方向。 2024年海上风电项目加速…

基于SpringBoot+Apache ECharts的前后端分离外卖项目-苍穹外卖(十八)

数据展示 1. Apache ECharts1.1 介绍1.2 入门案例 2. 营业额统计2.1 需求分析和设计2.1.1 产品原型2.1.2 接口设计 2.2 代码开发2.2.1 VO设计2.2.2 Controller层2.2.3 Service层接口2.2.4 Service层实现类2.2.5 Mapper层 2.3 功能测试 3. 用户统计3.1 需求分析和设计3.1.1 产品…

如果发现某个地方太薄了想要加厚怎么办?

Q 做完模型后&#xff0c;发现斧头柄部太薄了想要加厚怎么办&#xff1f; A 使用圆形套索区域&#xff0c;选中点 然后左视图&#xff0c;选择缩放&#xff0c;横向拉宽即可

git bash:ls查看文件颜色全部为白色的解决方法(已解决)

方法一&#xff1a; 修改~/.bashrc文件或者~/.profile文件&#xff0c;添加如下内容 alias lsls --colorauto 然后 source一下&#xff0c;让修改配置生效 source ~/.profile 然后再ls OK了

哪些网页原型设计工具易于使用?

本文介绍了七种专业易用的原型工具&#xff0c;帮助您快速制作可验证的方案原型&#xff0c;减少产品、运营和其他同事的沟通时间&#xff0c;以及设计师绘制效果图的沟通时间。我相信你可以在阅读后找到最合适的网页原型设计工具。网页界面原型设计软件有很多选择。以下是一些…

超全的数据可视化图表组件,建议收藏!

直观的图表可以让受众理解复杂的数据&#xff0c;图表也分为很多种类&#xff0c;不同的图表的适用场合不同&#xff0c;小编对【派可数据 BI】的可视化组件进行梳理&#xff0c;根据使用场景&#xff0c;将可视化组件划分了以下几类&#xff1a;指标、趋势、比较、时序、空间、…

Ansible user 模块 该模块主要是用来管理用户账号

目录 参数语法验证创建用户删除用户验证 删除用户 参数 comment  # 用户的描述信息 createhome  # 是否创建家目录 force  # 在使用stateabsent时, 行为与userdel –force一致. group  # 指定基本组 groups  # 指定附加组&#xff0c;如果指定为(groups)表示删除所有…

Vue3路由元信息

路由元信息即定义路由时的meta信息 使用路由元信息定义页面在浏览器显示的标题 定义路由 const router createRouter({history:createWebHistory(import.meta.env.BASE_URL),routes:[{path:"/",component:()>import("/components/Login.vue"),meta:{…

C# OpenCvSharp DNN Low Light image Enhancement

目录 介绍 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN Low Light image Enhancement 介绍 github地址&#xff1a;GitHub - zhenqifu/PairLIE 效果 模型信息 Model Properties ------------------------- ---------------------------------------------------…

stream流-> 判定 + 过滤 + 收集

List<HotArticleVo> hotArticleVos hotArticleVoList .stream() .filter(x -> x.getChannelId().equals(wmChannel.getId())).collect(Collectors.toList()); 使用Java 8中的Stream API对一个名为hotArticleVoList的列表进行过滤操作&#xff0c;筛选出符合指定条件…

可视化大屏C位的中国地图,都有哪些样式?

可视化设计用上了中国地图&#xff0c;那么中国地图必定占据了C位&#xff0c;这可是大屏中最显眼的位置&#xff0c;最抓眼球的地方&#xff0c;咱们总不能随随便便截图放上去吧。 本文就带若干张地图样式&#xff0c;开拓一下大家的思路。

POI WorkbookFactory.create(inputStream) IndexOutOfBoundsException

近期&#xff0c;运行稳定的excel导入功能突然异常&#xff0c;查看了日志&#xff0c;发现以下图示异常&#xff1a; 追踪代码发现是以下代码引起问题&#xff1a; 发现&#xff0c;WorkbookFactory.create(inputStream) 创建workbook对象时读取文件内容下标越界了 分析是因…

项目解决方案:街道社区视频监控接入、汇聚和联网设计方案

目 录 一、客户需求 二、网络拓扑图 三、方案描述 四、系统配置 1、服务器配置 2、带宽配置 五、方案优势 1. 平台可堆叠使用 2. 支持主流接入协议 4. 多种终端显示 5. 客户端功能强大 6. 一机一档 一、客户需求 1&#xff0c;一个街道有十个社…

SpringCloud-Docker原理解析

Spring Cloud和Docker的结合为微服务架构的部署和管理提供了强大的支持。本文深入剖析Spring Cloud与Docker的集成原理&#xff0c;从服务注册与发现、配置管理、负载均衡到容器化部署等方面展开详细解析。探讨Spring Cloud如何利用Docker容器技术实现服务的弹性伸缩&#xff0…

数据结构--双向链表专题

目录 1. 双向链表的结构2. 实现双向链表预先的准备初始化尾插、头插尾删、头删查找在pos位置之后插⼊数据删除pos位置的数据 3. 顺序表和双向链表的分析 1. 双向链表的结构 注意&#xff1a;这里的“带头”跟前面我们说的“头结点”是两个概念&#xff0c;为了更好的理解直接称…