网络爬虫常见问题汇总

网络爬虫常见问题汇总

问题一:使用requests库或者urllib库获取源代码时无法正常显示中文

解决方法:

(1)requests库的文本中有两种类型,一种是文本类型,使用text属性,一种是针对音频、视频、图片等二进制数据类型,使用content属性;一般返回的是text属性时会出现中文乱码现象,因此在输出返回之前需要显示的修改属性encoding,将其赋值为“utf-8”或者是apparent_encoding即可。

(2)urllib库的文本只有一种就是使用read()方法进行读取。因此要解决中文问题,一定要在读取后加入.decode(“utf-8”),进行显示的转码之后便不会出现乱码问题了。

问题二:文本节点

首先看两个HTML代码:

这是你眼中的HTML代码
在这里插入图片描述
这是计算机眼中的HTML代码:
在这里插入图片描述
解决方法:

在BS4中, 我们在HTML中看到的换行符以及空格都是NavigableString 也就是文本节点.

问题三:滥用遍历文档树的方法

常见的方法有:

contents
descendants
parent
next_sibling
next_element

这些方法都会遍历文档树中的所有节点, 包括文本节点. 也就是说: 只要你使用这些方法, 你就一定会选择出许多文本节点, 因为文本节点无处不在: 换行, 空格等.

解决方法:

使用过滤器find等方法:

soup.find(name=‘tagname’)
当我们一旦在过滤器中指定了name关键字, 那么返回的结果就一定是tag对象, 因为文档节点没有name属性.

结论: 大多数情况下, 你需要的是find 这一类过滤器, 而不是遍历所有节点.

问题四:html.parser

html.parser是个令人又恨又爱的解析器, 它是Python内置的解析器, 开箱即用. 但是在一些情况下, 它解析出来的文档会丢失信息.

解决方法:

如果你发现你的文档信息缺少了, 那么试着换其他解析器,例如: lxml

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值