Python和Beautiful Soup爬虫助力提取文本内容

大家好,网络爬虫是一项非常抢手的技能,收集、分析和清洗数据是数据科学项目中最重要的部分。今天介绍如何从链接中爬取高质量文本内容,我们使用迭代,从大约700个链接中进行网络爬取。如果想直接跳转到代码部分,可以在下方链接GitHub仓库中找到,同时还会找到一个包含将爬取的700个链接的.csv数据集。

【GitHub】:https://github.com/StefanSilver3/MediumArticlesCode-byStefanSilver/tree/main/WebScraping

1.从单个链接进行网页抓取

首先导入所需的库:

from bs4 import BeautifulSoup
import requests
from bs4.element import Comment
import urllib.request

如果还没有安装BeautifulSoup库,可以直接在Python中安装:

pip install beautifulsoup4

然后开始编码,这里定义两个函数,一个用于检查要排除的内容,另一个用于从网站上爬取内容。

第一个函数用于查找要排除的元素,代码如下:

# 要从提取的文本中过滤的标签
def tag_visible(element):if element.parent.name in ['style', 'script', 'head', 'title', 'meta', '[document]']:return Falseif isinstance(element, Comment):return Falsereturn True

第二个函数将使用这个函数,以确保所有的无用内容都从最终结果中排除,代码如下:

# 从网页文本中过滤前一个函数中提到的所有标签的函数
def text_from_html(body):soup = BeautifulSoup(body, 'html.parser')texts = soup.findAll(string=True)visible_texts = filter(tag_visible, texts)  return u" ".join(t.strip() for t in visible_texts)

进而可以在一个新链接上测试这两个函数,可以放置任意链接,不需要使用下面的链接。

html = urllib.request.urlopen('https://www.artificialintelligence-news.com/2023/11/20/microsoft-recruits-former-openai-ceo-sam-altman-co-founder-greg-brockman/').read()
print(text_from_html(html))

网络爬取的内容将会像下面的文本一样:

图片

爬取的网站——随机链接

注意,一些网站会检测到网络爬取活动,并阻止网络爬取尝试。如果发生这种情况,将收到一个403错误,这是“禁止”的代码。

2.同时爬取多个链接

测试了简单的提取函数,接下来对提供的链接数据集的所有链接进行迭代提取。首先确保获取了在GitHub仓库中找到的数据集,然后读取数据集并将列名更改为Link,原本的列名是max(page)

df = pd.read_csv("furniture_stores_pages.csv")df.rename(columns={"max(page)":"Link"}, inplace=1)

创建一个以0为起始值的变量x,它将在列表中的每个链接上进行迭代,也可以使用元素变量。

x=0
df_contents=[]
for element in df.iterrows():try:url = df["Link"][x]scraped_text = urllib.request.urlopen(url).read()df_contents.append(text_from_html(scraped_text))x=x+1except:print("(",x,")","This website could not be scraped-> ",df["Link"][x])x=x+1

定义一个名为df_contents的列表,它将包含从每个网页中提取的所有可以爬取的文本。

接下来,遍历每个元素,如果可以访问且包含相关数据,就从中提取信息。这只是对随机链接进行上述测试,但测试的对象是提供的数据集中的所有链接。代码中还使用了try-except对无法提取的链接进行跳过。

检查新列表(df_contents)的长度,查看提取了多少链接。

len(df_contents)

这个函数返回268,这意味着在700多个网站中只有268个爬取成功,可以使用下面的代码访问并打印第一个被爬取的网站。

df_contents[0]

这将打印第一个文本,示例如下所示(简短版本):

图片

从数据集中爬取的网站

如果需要的话,也可以使用下面的代码反复打印。每打印完一个元素后,都需要输入任意字符以继续,这样就可以逐一检查每个提取的网站。

count = 0
for element in df_contents:print(df_contents[count])print("\n \n---------------------------------------------------------------------------------------- \n \n")print("Press any key to continue to print df_contents [",count+1,"]")input()count= count+1

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JUC】二十六、Java对象内存布局和对象头

文章目录 0、前置1、对象的内存布局2、对象头之对象标记Mark Word3、对象头之类元信息4、实例数据5、对齐填充6、对象内存布局之JOL证明7、对象分代年龄8、压缩指针 0、前置 heap(堆区),分为新生区new、养老区old、元空间Metaspace&#xff…

C语言—每日选择题—Day46

第一题 1. 下列程序段的输出结果是&#xff08;&#xff09; #include <stdio.h> int main() {int x 1,a 0,b 0;switch(x) {case 0: b;case 1: a;case 2: a;b;}printf("a%d,b%d\n", a, b);return 0; } A&#xff1a;a2,b1 B&#xff1a;a1,b1 C&#xf…

探秘机器学习核心逻辑:梯度下降的迭代过程 (图文详解)

一 需求解函数 f() 和 g()函数分别为求y值和求导数的函数。 目的&#xff1a;求该函数的最小值&#xff1a; 代码&#xff1a; import numpy as np import matplotlib.pyplot as plt f lambda x : (x - 3.5) ** 2 - 4.5 * x 10 g lambda x : 2 * (x - 3.5) - 4.5x np.l…

接口管理——Swagger

Swagger是一个用于设计、构建和文档化API的工具集。它包括一系列工具&#xff0c;如Swagger Editor&#xff08;用于编辑Swagger规范&#xff09;、Swagger UI&#xff08;用于可视化API文档&#xff09;和Swagger Codegen&#xff08;用于根据API定义生成客户端库、server stu…

SpringCloud系列(二)| Nacos的安装与配置

Nacos是阿里巴巴提供的一个开源的可作为注册中心和配置中心的SpringCloud组件。 Nacos/nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称;一个更易于构 建云原生应用的动态服务发现、配置管理和服务管理平台。 简单来说Nacos有两个核心功能&#xff0c…

深度学习中的各类评价指标

深度学习中的各类评价指标 1 Dice Loss2 Precision&#xff08;精度&#xff09;3 Recall&#xff08;召回率&#xff09;4 F-Score5 mAP 1 Dice Loss Dice Loss&#xff0c;也叫Soft Dice Coefficient&#xff0c;是一种用于图像分割任务的损失函数。它基于目标分割图像与模型…

Uniapp项目打包到多个平台...

打包到微信小程序 先设置微信开发者工具的路径 运行到小程序模拟器&#xff0c;会自动打开微信开发者工具&#xff08;需要先在微信开发者工具->设置->安全设置->服务端口切换为打开状态&#xff09; 3. 微信开发者工具上传版本&#xff08;提示覆盖版本就可以了&a…

“百里挑一”AI原生应用亮相,百度智能云千帆AI加速器首个Demo Day来了!

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

用户管理第2节课 -- idea 2023.2 创建表

一、懂得 1.1编码格式是防止乱码的&#xff0c;utf-8是完全够的&#xff0c;那几个基本没差别 网址&#xff1a; 【IDEA——连接MySQL数据库&#xff0c;创建库和表】_idea中数据库-CSDN博客 这些是MySQL数据库中的一些术语&#xff0c;可以简单解释如下&#xff1a; 1、col…

第三十四周:文献阅读+LSTM学习

目录 摘要 Abstract 文献阅读&#xff1a;综合EMD-LSTM模型在城市排水管网水质预测中的应用 现有问题 提出方法 EMD-LSTM综合模型 研究框架 结论 Long Short-term Memory(长短期记忆) 1. LSTM的结构 2. Multiple-layer LSTM 3.3 LSTM Example 3. GRU LSTM实现PM2…

Java+SSM+MySQL基于微信的在线协同办公小程序(附源码 调试 文档)

基于微信的在线协同办公小程序 一、引言二、系统设计三、技术架构四、管理员功能设计五、员工功能设计六、系统实现七、界面展示八、源码获取 一、引言 随着科技的飞速发展&#xff0c;移动互联网已经深入到我们生活的各个角落。在这个信息时代&#xff0c;微信作为全球最大的…

靠谱的车- 华为OD统一考试(C卷)

靠谱的车- 华为OD统一考试&#xff08;C卷&#xff09; OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 程序员小明打了一辆出租车去上班。出于职业敏感&#xff0c;他注意到这辆出租车的计费表有点问题&#xf…

【知识】如何区分图论中的点分割和边分割

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 以下两个概念在现有中文博客下非常容易混淆&#xff1a; edge-cut(边切割) vertex-partition(点分割)vertex-cut(点切割) edge-partition(边分割) 实际上&#xff0c;初看中文时&#xff0c;真的会搞不清楚。但…

黑豹程序员-EasyExcel实现导出

需求 将业务数据导出到excel中&#xff0c;老牌的可以选择POI&#xff0c;也有个新的选择EasyExcel。 有个小坑&#xff0c;客户要求样式比较美观&#xff0c;数字列要求千位符&#xff0c;保留2位小数。 可以用代码实现但非常繁琐&#xff0c;用模板就特别方便&#xff0c;模…

Pyhon基于YOLOV实现的车辆品牌及型号检测项目源码+模型+项目文档

项目运行运行录屏&#xff1a; Pyhon基于YOLOV实现的车辆品牌及型号检测项目运行录屏 完整代码下载地址&#xff1a;Pyhon基于YOLOV实现的车辆品牌及型号检测项目 项目背景&#xff1a; 车辆检测及型号识别广泛应用于物业&#xff0c;交通等的管理场景中。通过在停车场出入口…

Docker容器:Centos7搭建Docker镜像私服harbor

目录 1、安装docker 1.1、前置条件 1.2、查看当前操作系统的内核版本 1.3、卸载旧版本(可选) 1.4、安装需要的软件包 1.5、设置yum安装源 1.6、查看docker可用版本 1.7、安装docker 1.8、开启docker服务 1.9、安装阿里云镜像加速器 1.10、设置docker开机自启 2、安…

uni-app 设置tabBar的setTabBarBadge购物车/消息等角标

目录 一、效果二、代码实现二、全部代码1.index.vue2.cart.vue 三、真实案例参考最后 一、效果 二、代码实现 只要使用uni.setTabBarBadge和uni.removeTabBarBadge来进行对红点的设置和移除。 主要代码&#xff1a; //设置红点 uni.setTabBarBadge({index: 1, // 底部菜单栏…

19-数据结构-查找-散列查找

目录 一、散列查找结构思路图 二、哈希函数 三、解决冲突 1.开放地址法 1.1.线性探测法&#xff08;线性探测再散列法&#xff09; 1.2.平方探测法&#xff08;二次探测再散列&#xff09; 1.3.再散列法&#xff08;双散列法&#xff09; 2.拉链法 2.1简介 四、散列查…

Python 自动化之批量处理文件(一)

批量新建目录、文档Pro版本 文章目录 批量新建目录、文档Pro版本前言一、做成什么样子二、基本思路1.引入库2.基本架构 三、用户输入模块四、数据处理模块1.excel表格数据获取2.批量数据的生成 总结 前言 我来写一个不一样的批量新建吧。在工作中&#xff0c;有些同学应该会遇…

mybatis的快速入门以及spring boot整合mybatis(二)

需要用到的SQL脚本&#xff1a; CREATE TABLE dept (id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT ID, 主键,name varchar(10) NOT NULL UNIQUE COMMENT 部门名称,create_time datetime DEFAULT NULL COMMENT 创建时间,update_time datetime DEFAULT NULL COMMENT 修改…