爬虫基础之w3lib

news/2024/11/9 0:52:02/

目前在做的项目中遇到一个需求:将爬取到的大量网页中的文本提取出来。由于网页太多,无法逐个分析使用xpath表达式进行提取。使用正则表达式可以实现,但太麻烦。这里介绍一款专业处理这方面问题的包w3lib

w3lib简介

w3lib是一个Python包,实现了一下与web相关的功能:

  • 从html片段中移除注释或者标签
  • 从html片段中提取base url
  • 对html串中的字符实体进行转义
  • 将原始HTTP头转换为字典格式
  • 构造HTTP的认证报头
  • 将html页面转换成unicode编码格式
  • 从urls中提取参数

w3lib主要包括四个模块:

  • html模块:处理与html标签相关的问题
  • http模块:处理与http报文相关的问题
  • url模块:处理与url地址相关的问题
  • encoding模块:处理与编码格式相关的问题

实例片段

w3lib是scrapy的依赖包,所有当我们安装好scrapy后不需额外安装w3lib。这里主要用到了html模块,关键代码段如下:

from w3lib.html import remove_tags
from w3lib.html import replace_entitiesdef get_text_from_divs(divs):# input:body里面的所有div节点,每个div下还嵌套多层其他标签# output:将每个div节点里除标签以外的文本提取出来,组成字符串output = ""for div in divs:# 对每个div下的内容:# 移除全部标签,转换全部字符实体,将所有转义字符(\n,\r,\t)替换成空格:div_text = replace_escape_chars(replace_entities(remove_tags(div)), replace_by=" ")# div_text由当前div下嵌套的其他标签之间的文本组成,这些文本之间存在大量重复空格# 将重复空格替换成一个空格:content = " ".join(div_text.split())# 将每个div中的文本拼接成字符串,用空格间隔output = output + content + " "return outputdef parse(self, response):divs = response.xpath("//body/div").extract()content = utils.get_text_from_divs(divs)print(content)

函数功能

这里主要使用了html模块下的三个函数
remove_tags() 默认情况下移除所有html标记,及标签的属性,只保留标签之间的文本,实例如下:

>>> import w3lib.html
>>> doc = '<div><p><b>This is a link:</b> <a href="http://www.example.com">example</a></p></div>'
>>> w3lib.html.remove_tags(doc)
'This is a link: example'

replace_entities()主要用于移除文本之间的字符实体,比如&nbsp&gt;
replace_escape_chars()主要用于移除文本之间的专业字符,包括\n\r\t


http://www.ppmy.cn/news/637729.html

相关文章

w3c标准的深入理解

简介 万维网联盟&#xff08;外语缩写&#xff1a;W3C&#xff09;标准不是某一个标准&#xff0c;而是一系列标准的集合。网页主要由三部分组成&#xff1a;结构&#xff08;Structure&#xff09;、表现&#xff08;Presentation&#xff09;和行为&#xff08;Behavior&…

电商神器!教你如何利用数据分析打造销售奇迹!

能解决80%通用需求&#xff0c;提供销售、财务、广告、库存等电商数据分析主题的奥威BI电商数据分析方案一直都是比较神秘的存在。有说它风险低的&#xff0c;也有说它性价比高、效率高、可塑性高&#xff08;支持个性化开发&#xff09;&#xff0c;但说到底&#xff0c;这份B…

爬虫好搭档之 w3lib

time: 2018/04/10 w3lib 是scrapy的基础插件,用来处理html,灰常的好用,清理文本带有HTML标签的数据; 官方文档 w3lib.encoding.html_body_declared_encoding(html_body_str) 作用是返回网页的编码,如果网页有<meta charsetutf-8>就会返回utf-8w3lib.encoding.http_con…

w3school和w3cschool两个网站有什么关系和区别?

w3school地址&#xff1a;http://www.w3school.com.cn/ w3cschool地址&#xff1a;https://www.w3cschool.cn 其中w3cschool是应w3c中国组织官方而出的&#xff0c;而w3school是上海赢科投资有限公司进行投资的&#xff0c;但是是为了协助w3c中国组织而出的重点大家应该也看出…

W3C标准详解

W3C标准详解 w3c&#xff08;即万维网联盟 World Wide Web Consortium&#xff09;标准不是一个标准&#xff0c;而是一系列标准的集合。 网页主要有三部分组成结构&#xff08;Structrue&#xff09;&#xff0c;表现&#xff08;Presentation&#xff09;&#xff0c;行为(B…

w3c标准html,W3C标准及规范

1、DOCTYPE(document type)文档类型 用于说明你的XHTML或HTML是什么版本,其中的DTD为文档类型定义,里面包含了文档的规则,浏览器通过你定义的DTD来解释你页面的标识并展现出来,DOCTYPE是必不可少的关键组成部分,除非你的XHTML确定了一个正确的DOCTYPE,否则你的标识和CSS都…

服务器中W3SVC1文件夹的文件,c:\winnt\system32\logfiles\w3svc1\ 文件夹下面到底是记录什么样的文件,可以删除吗?...

c:\winnt\system32\logfiles\w3svc1\ 文件夹下面到底是记录什么样的文件&#xff0c;可以删除吗&#xff1f; 來源:互聯網 2010-05-04 21:11:00 評論 分類: 電腦/網絡 >> 操作系統/系統故障 問題描述: c:\winnt\system32\logfiles\w3svc1\ 文件夹下面到底是记录什么样的…

mysql中distinct是什么_数据库中 DISTINCT 的作用是什么?

展开全部 SQL数据库中&#xff0c; DISTINCT表示去掉重复的行&#xff0c;作用是针对包含重复值的数据表&#xff0c;用于返回唯一不同的值。语法是636f70793231313335323631343130323136353331333433623731SELECT DISTINCT 列名称 FROM 表名称。如果指定了 SELECT DISTINCT&am…