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.mzph.cn/news/217817.shtml

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

相关文章

【图像拼接】论文精读:Natural Image Stitching With Layered Warping Constraint

第一次来请先看这篇文章:【图像拼接(Image Stitching)】关于【图像拼接论文精读】专栏的相关说明,包含专栏使用说明、创新思路分享等(不定期更新) 图像拼接系列相关论文精读 Seam Carving for Content-Aware Image ResizingAs-Rigid-As-Possible Shape ManipulationAdap…

Java面试整理(四)-JVM类加载机制(中)

Java虚拟机(JVM)的类加载机制是Java平台的核心组件之一,它负责加载、链接、初始化类和接口。这个机制涉及几个关键的步骤和组件: 类加载器(Class Loaders):引导类加载器(Bootstrap Class Loader):这是JVM的一部分,用于加载JDK内部类和其他核心库。通常,这个类加载器…

Java版本+鸿鹄企业电子招投标系统源代码+支持二开+Spring cloud +鸿鹄电子招投标系统

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。为了符合国家电子招投标法律法规及相关规范,…

2697. 字典序最小回文串(2023-12-13)

力扣每日一题 题目:2697. 字典序最小回文串 日期:2023-12-13 用时:4 m 53 s 时间:7ms 内存:43.61MB 代码: class Solution {public String makeSmallestPalindrome(String s) {char[] chs s.toCharArray…

基于SpringBoot的在线考试系统

基于SpringBoot的在线考试系统 文章目录 基于SpringBoot的在线考试系统 一.引言二.系统设计三.技术架构四.系统功能模块设计五.功能实现六.源码获取 一.引言 在线考试系统是一种基于互联网技术的教育辅助工具,它通过利用SpringBoot框架的优势,实现了高效…

c语言注册登录+实验室物帐管理系统

实验室物帐管理系统:用户手册 1引言 本用户手册旨在为实验室物帐管理系统的使用提供指导和帮助。该系统旨在实现以下功能:仪器设备条目的输入、仪器设备的借还以及库存情况查询及修改。通过本手册,您将了解到如何正确使用该系统&#xff0c…

创建全0或全1矩阵numpy.matlib.zeros()numpy.matlib.ones()

【小白从小学Python、C、Java】 【计算机等级考试500强证书考研】 【Python-数据分析】 创建全0或全1矩阵 numpy.matlib.zeros() numpy.matlib.ones() 选择题 请问执行np.matlib.zeros((2,2))的结果是: import numpy.matlib import numpy as np print("【执行】…

图片压缩软件4K Image Compressor Pro mac特点介绍

4K Image Compressor Pro mac是一款专业的图片压缩软件,它可以在不损失图像质量的前提下,优化图片文件的大小,从而节省存储空间,方便在社交媒体上共享图片,并优化网站加载速度。 4K Image Compressor Pro mac软件特点 …

Go语言文件操作:文件读写案例以及相关细节介绍

文章目录 介绍一、打开文件1.1 以只读的方式打开文件1.2 自定义的方式打开文件 二、文件读写代码案例2.1 从磁盘读取数据2.2 向磁盘写数据 介绍 对文件进行操作时,其中最基本的操作就是"读写"。本文将介绍Go语言中文件读写的案例和相关细节。在Go语言中&…

xcode iOS 17.2 not install, Simulator 手动安装

xcode iOS 17.2 not install, Simulator 手动安装 参考文档 xcode又又又升级了,升级完成之后不下载最新的 iOS 17 Simulator就不能编译运行了,只能静静的等他下载。但是离谱的是这个居然没有断点续下,每次都要重新下载,眼睁睁的…

session 和 cookie 有什么区别?

session 和 cookie 有什么区别? Session 和 Cookie 都是用于在Web应用中存储用户信息的机制,但它们有一些关键的区别。 存储位置: Cookie 存储在客户端,以文本形式存储在浏览器中。 Session 存储在服务器端,通常在服…

Onlyoffice本地部署超详细教程(附协作空间2.0新资讯)

陈老老老板🤴 🧙‍♂️本文专栏:生活(主要讲一下自己生活相关的内容)生活就像海洋,只有意志坚强的人,才能到达彼岸。 🧙‍♂️本文简述:ONLYOFFICE相信大家已经有所了解,本篇讲一下o…

2023全国职业院校技能大赛信息安全管理与评估正式赛(模块三CTF)

全国职业院校技能大赛高等职业教育组信息安全管理与评估 \任务书\ 模块三 网络安全渗透、理论技能与职业素养 极安云科专注技能竞赛,包含网络建设与运维和信息安全管理与评估两大赛项,及各大CTF,基于两大赛项提供全面的系统性培训&#xf…

算法 - 二分搜索法 / 二分法(704)

原理: 利用数组的有序性,每次取查找范围的中间点,缩窄一半的查找空间。比较中间值和目标值的大小,直到找到目标值或者查找区间为空时返回。 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目&…

C++STL的list模拟实现

文章目录 前言 list实现push_back迭代器(重点)普通迭代器const迭代器 inserterase析构函数构造函数拷贝构造赋值 vector和list的区别 前言 要实现STL的list, 首先我们还得看一下list的源码。 我们看到这么一个东西,我们知道C兼容C,可以用struct来创建一…

保姆级:Windows Server 2012上安装.NET Framework 3.5

📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​ 🌟在这里,我要推荐给大家我的专栏《Windows》。🎯🎯 🚀无论你是编程小白,还是有…

【python】PDF转长图

PDF转化成长图 步骤: pip install pdf2image下载依赖文件poppler 上代码 # 导入所需的库 from PIL import Image import fitz from pdf2image import convert_from_path# 定义PDF文件路径、保存图像路径和Poppler路径 pdf_file rD:\workspace\python学习笔记.pdf…

什么是产品经理 | 文末赠书

目录 一. 产品经理是什么?二. 产品经理需要具备的技能三. 产品经理的职责四. 产品经理在软件开发过程中如何平衡不同利益方的需求?五. 入门建议六. 发展前景七. 总结🦁文末福利图书介绍作者简介 一. 产品经理是什么? 产品经理是指…

javascript代码规范

语句规范 所有语句后面需要有";"(*)If、for、do、while 等所有循环体和判断体的执行语句部分都用“{}”括起来,尽量不要省略花括号(不强制,单行时可省略)。禁止在 return 关键字及要返回的表达式之间换行(*)。每行代码应少于 120 个字符,多于…

程序员保密协议(软件开发岗位协议)

保密协议 甲方: 乙方: 鉴于:乙方愿意被聘用到甲方工作,双方经平等协商一致,自愿达成本保密协议。本协议涉及保密和知识产权的内容。 本协议所称任职期间,是指自甲乙双方劳动…