找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 6057|回复: 2

[求助] python抓取网页正文 去掉所有格式,只保留p span 文字和超链接

1

主题

1

帖子

1

积分

贫民

积分
1
lammeimei 发表于 2017-8-23 11:05:27 | 显示全部楼层 |阅读模式
1威望
求教:用python抓取网页后,如果去掉原有网页包括字体,字号等所有格式,只保留<p><span>标签、文字以及超链接

<p align="center" class="MsoNormal" style="text-align: center; margin: 0cm 28.25pt 0pt 0cm; line-height: 150%; mso-para-margin-right: 2.69gd"><b><span style="font-size: 22pt; font-family: 宋体; line-height: 150%; mso-ascii-theme-font: major-fareast; mso-fareast-theme-font: major-fareast; mso-hansi-theme-font: major-fareast">学习Python,求教高手</span></b></p>

变成:

<p align="center"><span>学习Python,求教高手</span></p>

回复

使用道具 举报

0

主题

27

帖子

27

积分

贫民

积分
27
艾幻翔 发表于 2017-8-23 16:45:10 | 显示全部楼层
本帖最后由 艾幻翔 于 2017-8-25 13:57 编辑

献丑~
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # Created by lightwave on 2017/8/23

  4. import re

  5. ignore_name = ('p', 'span', 'a')
  6. ignore_param = ('align', 'href')
  7. reg_node = r"<(\w+)[\s\S*]*?>|</(\w+)>|<(\w+)(\s\S*)*?/>"
  8. reg_param = r'\s+(\w+)(=("?)[\s\S]*?\3)?'


  9. def sub_node(match):
  10.     if match.group(1) and match.group(1) in ignore_name:
  11.         match = match.group()
  12.         if re.search(reg_param, match):
  13.             return re.sub(reg_param, sub_param, match)
  14.         else:
  15.             return match
  16.     elif match.group(2) and match.group(2) in ignore_name:
  17.         return match.group()
  18.     elif match.group(3) and match.group(3) in ignore_name:
  19.         return match.group()
  20.     return ''


  21. def sub_param(match):
  22.     if match.group(1) in ignore_param:
  23.         return match.group()

  24.     return ''


  25. if __name__ == '__main__':
  26.     data = r"""<p align="center" class="MsoNormal" style="text-align: center; margin: 0cm 28.25pt 0pt 0cm; line-height: 150%; mso-para-margin-right: 2.69gd"><b><span style="font-size: 22pt; font-family: 宋体; line-height: 150%; mso-ascii-theme-font: major-fareast; mso-fareast-theme-font: major-fareast; mso-hansi-theme-font: major-fareast">学习Python,求教高手</span></b></p>"""

  27.     data = re.sub(reg_node, sub_node, data)
  28.     print(data)
复制代码


回复

使用道具 举报

0

主题

5

帖子

5

积分

贫民

积分
5
liuvz11 发表于 2017-8-24 10:19:27 | 显示全部楼层
  1. # -*- coding: utf-8 -*-
  2. from lxml import etree
  3. data = u"""
  4. <p align="center" class="MsoNormal" style="text-align: center; margin: 0cm 28.25pt 0pt 0cm; line-height: 150%; mso-para-margin-right: 2.69gd"><b><span style="font-size: 22pt; font-family: 宋体; line-height: 150%; mso-ascii-theme-font: major-fareast; mso-fareast-theme-font: major-fareast; mso-hansi-theme-font: major-fareast">学习Python,求教高手</span></b></p>
  5. """

  6. et = etree.HTML(data)
  7. p_align = et.xpath("//p/@align")[0]
  8. span_text = et.xpath("//span/text()")[0]
  9. print u"<p align={}><span>{}</span></p>".format(p_align, span_text)
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表