爬虫,一个静态网站,里面的我画红色线遮盖的是文本内容,请求页面信息很简单,我想要把里面每句的文本内容拿出来,因为主文中没有标签,所不知道怎么单独拿出来,处理数据只是能把整个大盒子里的文本内容拿下来,不能把主文内容单独摘下来.,谢谢解答
4条回答 默认 最新
关注 参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。
处理一个静态网站中没有特定标签包裹的主文内容时,确实需要更精细的方法来提取所需文本。如果整个主文部分没有结构化的HTML标签加以区分,可以尝试以下几种方法:
-
XPath 或 CSS 选择器:尽管主文可能没有明显标签,但可以通过分析页面结构找到规律,比如利用周围的固定元素作为参考,或者通过文本位置、行间距等间接方式定位。然后使用
lxml
库中的 XPath 或 BeautifulSoup 库中的 CSS 选择器选取主文区域内的文本。例如,如果有规律可循,可以尝试抽取某个
<div>
或<p>
标签内的所有非空白文本,不包含子标签(如脚注、引用等):from bs4 import BeautifulSoup # 假设response.text是网页源代码 soup = BeautifulSoup(response.text, 'html.parser') main_text = [p.get_text().strip() for p in soup.select('#main-content > p:not(.footnote)')]
-
文本节点筛选:
- 如果所有文本都在文档流中连续出现,可以尝试获取所有文本节点并合并过滤。在 Python 的 Scrapy 框架或 lxml 库中,可以提取非脚本和样式表的文本节点:
然后根据文本之间的空行、特殊字符或其他特征进一步分割出主文内容。text_list = response.xpath('//*[not(self::script or self::style)]/text()[normalize-space()]').getall() main_text = ' '.join(text_list)
- 如果所有文本都在文档流中连续出现,可以尝试获取所有文本节点并合并过滤。在 Python 的 Scrapy 框架或 lxml 库中,可以提取非脚本和样式表的文本节点:
-
正则表达式匹配:
- 在某些情况下,主文内容可能有一定的格式特征,例如前面提到的每句之间换行等,这时可以用正则表达式提取。这通常是在上述方法无法直接应用的情况下采取的一种补充手段。
-
基于自然语言处理 (NLP):
- 对于难以通过HTML结构区分的内容,还可以先抓取整块文本,然后通过自然语言处理技术识别文章段落,比如利用句子分割算法进行划分。
-
手动规则制定:
- 针对具体网站,仔细观察其源码,找出主文区与其它非正文内容之间的差异,手工编写规则来提取。
总之,关键在于理解目标网站的布局和内容特点,以便准确地定位和提取主文内容。对于复杂的场景,可能需要结合多种策略来解决问题。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报-
悬赏问题
- ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
- ¥15 android 集成sentry上报时报错。
- ¥50 win10链接MySQL
- ¥35 跳过我的世界插件ip验证
- ¥15 抖音看过的视频,缓存在哪个文件
- ¥15 自定义损失函数报输入参数的数目不足
- ¥15 如果我想学习C大家有是的的资料吗
- ¥15 根据文件名称对文件进行排序
- ¥15 deploylinux的ubuntu系统无法成功安装使用MySQL❓
- ¥15 有人会用py或者r画这种图吗