分享

记练习Python3 urllib爬百度首页遭遇的坑

 开源优测 2021-12-09

作者: 杭州-冬

地址:https://github.com/small99/deeptest/tree/master/第一期/杭州-冬

声明:本文已获作者授权转载,著作权归作者所有。

编辑:苦叶子

作者为开源优测-积微速成计划第一期参与者,每天都坚持学习,练习每日的代码任务

这是一个免费的组团成长计划

如何参与到开源优测-积微速成计划任务

记练习爬虫基础遭遇的坑

一、过程中的坑

爬百度首页时,获取不了html,只显示几行 

from urllib import request
import ssl

if name == "main":
   resp=request.Request('https://www.baidu.com')  
   #有时这里会出现decodeerrror,根据情况修改字符参数或者加个ignore                                            
   #默认第二个参数为strict--有时会造成错误    data=resp.read().decode('UTF-8')

   data=resp.read()    print(data)

执行后只是出现了下面几行简单的结果:

<script> location.replace(location.href.replace("https://","http://")); </script>

啥都没有 百度首页源代码那么多 只显示了这几行 而且似乎和百度首页的html没什么关系 查了下 一种说法是 那个noscript的东东起到了反爬的效果,所以我看不到html内容

后来我看别人的教程都可以,仔细对比后 我把https 改成 http 然后那个无比激动的看到了百度首页的html 了解到 访问https的网站时 大概是ssl这个东西作怪 该类型的网站都要经过安全认证

其实执行结果仔细看的话 也可以看出些问题  上面说了是http 而不是 https.

所以仔细分析提示很重要,不要提示都没搞清楚就各种搞
根据提示搞清原因很重要--能让你快速定位问题所在 快速解决问题
--看提示 仔细分析 定位问题
--各种可能都试一下,大胆推翻自己的的理解

第一个也是这几个月心得之一,今天再次让我心服口服。
刚开始提示啥的哪会看,后来犯错多了,发现提示的都是那几个东西,
想起以前怎么改的一路下去就正确了 其实这个提示我也看了,不过没太仔细而且理解错误,
我以为这是正常html的一部分 告诉读者会把输入的http 换成htts,
我一想也对,浏览器上面也是https。结果正好相反

二、编码问题

在爬一些网站有这个报错 File "crawler_eg.py", line 10, in data=resp.read().decode('UTF-8')

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 126: invalid start byte

根据提示 解码错误 2个方法 --选择解码字符集错误 把utf-8换成其它字符集
或--字符集正确,但不属于字符集解码内容的部分数据转化出错 decode('utf-8','ignore')--默认第二个参数为strict,改为ignore后直接忽视不能转换的数据

三、常见的一些错误提示 

req=request.Request(http://www.) ^ SyntaxError: invalid syntax

--代码中有无效字符(非法或不符合规范),通常错误都在标注的 ^ 附近(也不一定哦)

IndentationError:unexpected indent

--这类通常你的代码缩进出现错误,找个好的编辑器,它会用整齐划一的线条给你一个标记。照着线条调整就好

[总计175篇]2017年测试技术精选大集合

开源优测

分享软件测试开源技术、经验、方案的首发平台

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多