当前位置: 首页 > 科技观察

Python爬虫——写最简单的网络爬虫

时间:2023-03-14 21:58:13 科技观察

最近对python爬虫产生了浓厚的兴趣。我想在这里分享我的学习路径。欢迎提出建议。我们相互交流,共同进步。一、开发工具我用的工具是sublimetext3,它的短小(可能男人不喜欢这个词)让我很着迷。推荐大家使用,当然如果你的电脑配置不错,pycharm可能更适合你。sublimetext3搭建python开发环境推荐查看这篇博客:【sublime搭建python开发环境】[http://www.cnblogs.com/codefish/p/4806849.html]2.爬虫简介On互联网这个大网络。这样,我们就可以得到我们想要的了。既然要在互联网上爬取,就需要了解URL,法语名称“UniformResourceLocator”,昵称“Link”。它的结构主要由三部分组成:(1)协议:比如我们在网站中常见的HTTP协议。(2)域名或IP地址:域名,如:www.baidu.com,IP地址,即域名解析后对应的IP。(3)路径:即目录或文件等。3、urllib开发最简单的爬虫(一)urllib介绍模块介绍urllib.error由urllib.request引发的异常类。urllib.parse将URL解析为组件或从组件组装它们。urllib.request用于打开URL的可扩展库。urllib.responseurllib使用的响应类。urllib.robotparser加载robots.txt文件并回答有关其他URL可获取性的问题。(2)开发最简单的爬虫。百度首页简洁大方,很适合我们的爬虫。爬虫代码如下:fromurllibimportrequestdefvisit_baidu():URL="http://www.baidu.com"#opentheURLreq=request.urlopen(URL)#readtheURLhtml=req.read()#decodetheURLToutf-8html=html.decode("utf_8")print(html)if__name__=='__main__':visit_baidu()结果如下图所示:我们可以在百度首页空白处右键查看,与我们的运行结果进行对比查看审查要素。当然request也可以生成一个request对象,可以用urlopen方法打开。代码如下:fromurllibimportrequestdefvists_baidu():#createarequestobkectreq=request.Request('http://www.baidu.com')#opentherequestobjectresponse=request.urlopen(req)#readtheresponsehtml=response.read()html=html。decode('utf-8')print(html)if__name__=='__main__':vists_baidu()结果和之前一样。(3)错误处理错误处理由urllib模块处理,主要包括URLError和HTTPError错误,其中HTTPError是URLError的子类,即HTTPError也可以被URLError捕获。HTTPError可以通过其代码属性捕获。处理HTTPError的代码如下:fromurllibimportrequestfromurllibimporterrordefErr():url="https://segmentfault.com/zzz"req=request.Request(url)try:response=request.urlopen(req)html=response.read().decode("utf-8")print(html)excepterror.HTTPErrorase:print(e.code)if__name__=='__main__':Err()运行结果如图:404为打印错误代码。关于这方面的更多信息,可以自行百度。可以通过其reason属性捕获URLError。chuliHTTPError的代码如下:fromurllibimportrequestfromurllibimporterrordefErr():url="https://segmentf.com/"req=request.Request(url)try:response=request.urlopen(req)html=response.read()。decode("utf-8")print(html)excepterror.URLErrorase:print(e.reason)if__name__=='__main__':Err()运行结果如图:既然是处理错误,然后***这两个错误都写到代码里了,毕竟越详细越清楚。需要注意的是HTTPError是URLError的子类,所以必须把HTTPError放在URLError前面,否则会输出URLError,比如输出404为NotFound。代码如下:fromurllibimportrequestfromurllibimporterror#***方法,URLErroe和HTTPErrordefErr():url="https://segmentfault.com/zzz"req=request.Request(url)try:response=request.urlopen(req)html=response.read().decode("utf-8")print(html)excepterror.HTTPErrorase:print(e.code)excepterror.URLErrorase:print(e.reason)可以改url查看各种错误输出形式。