Ren泽 2024-02-10 22:09 采纳率: 100%
浏览 1
已结题

爬虫一个静态网站的数据处理方式

img

爬虫,一个静态网站,里面的我画红色线遮盖的是文本内容,请求页面信息很简单,我想要把里面每句的文本内容拿出来,因为主文中没有标签,所不知道怎么单独拿出来,处理数据只是能把整个大盒子里的文本内容拿下来,不能把主文内容单独摘下来.,谢谢解答

  • 写回答

4条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-02-10 22:12
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    处理一个静态网站中没有特定标签包裹的主文内容时,确实需要更精细的方法来提取所需文本。如果整个主文部分没有结构化的HTML标签加以区分,可以尝试以下几种方法:

    1. 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)')]
      
    2. 文本节点筛选

      • 如果所有文本都在文档流中连续出现,可以尝试获取所有文本节点并合并过滤。在 Python 的 Scrapy 框架或 lxml 库中,可以提取非脚本和样式表的文本节点:
        text_list = response.xpath('//*[not(self::script or self::style)]/text()[normalize-space()]').getall()
        main_text = ' '.join(text_list)
        
        然后根据文本之间的空行、特殊字符或其他特征进一步分割出主文内容。
    3. 正则表达式匹配

      • 在某些情况下,主文内容可能有一定的格式特征,例如前面提到的每句之间换行等,这时可以用正则表达式提取。这通常是在上述方法无法直接应用的情况下采取的一种补充手段。
    4. 基于自然语言处理 (NLP)

      • 对于难以通过HTML结构区分的内容,还可以先抓取整块文本,然后通过自然语言处理技术识别文章段落,比如利用句子分割算法进行划分。
    5. 手动规则制定

      • 针对具体网站,仔细观察其源码,找出主文区与其它非正文内容之间的差异,手工编写规则来提取。

    总之,关键在于理解目标网站的布局和内容特点,以便准确地定位和提取主文内容。对于复杂的场景,可能需要结合多种策略来解决问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月18日
  • 已采纳回答 2月10日
  • 创建了问题 2月10日

悬赏问题

  • ¥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画这种图吗