快速了解Python语言和网络爬虫,实例讲解(1)

mac2022-06-30  83

快速了解Python语言和网络爬虫,实例讲解(1)

致敬前言技术储备和作者的话你的第一个Python爬虫程序模拟http请求报文头部别忘了调整字符集 之后的内容

致敬

这里的相关知识和路径我是从gitchat上潘舒新的Python短信通知系统开发实战中学来的,我不是不想放上链接,是因为我在web版的gitchat上检索不到。不过这里所有的文字都是我用自己理解打的,所有代码都是我自己从新打的,我觉得我学了谭浩强的C语言程序设计,然后出来教C语言算不上是抄袭吧。

前言

我在开始准备这篇博客之前,对Python和网络爬虫一无所知,我相信通过这篇文章和后续文章会以最简单的语言与最直观的实例带着和此时的我一样的小白们了解Python语言和网络爬虫。 Python版本:3.x,本篇文章:3.7.2(Win),Python2.x和3.x有巨大的差别且貌似不向下兼容

技术储备和作者的话

我对Python其实毫无好感,在我眼里Java已经是够慢的语言了,Python这种脚本语言,在过去我一直不把这类语言当做编程(严格来说编程并不是计算机概念),除了强大的三方库和复杂的内置功能,我甚至想不出Python和R与vba有什么区别,因为我总是听到Python这个单词所以我打算了解一下,另外提一下这里用到Python的一些内置数据结构请自行了解(也可以不用),我甚至叫不出这些结构的名字,反正看得懂就行,注意:Python是一种弱类型语言,定义变量直接赋值就可以了,Python解释器会自动识别它的类型! 至于爬虫程序到底是做什么的有什么用,我们到后面在联想与总结!

需要的技术储备:

至少一种编程语言的基础语法;对IT相关名词的敏感度和理解;对web前端技术和http协议有一定了解;如果你不会安装Python环境也不会百度的话,建议你当场把我撕掉(看了张宇的高数课后我就当场放弃了考研,当然我觉得张宇老师讲的很好)

你的第一个Python爬虫程序

这里第一句引入 urllib.request,应该是Python内置包 这里第二句和第三句用到的是urllib库中的功能,简单来说就是打开一个html 至于要了解urllib库可以查阅相关文档,本文并不是一个Python或三方库教程,也不会给出这些文档的链接,因为我懒得去查,另外说下此时我不确定request是否是一个对象和Python里有没有对象这个概念。

import urllib.request response=urllib.request.urlopen('http://yearagain.com/') html=response.read() print(html)

运行上面这段代码会得到一个网页的全部源码,如下 这个源码看起来怪怪的是因为字符集的问题,稍后我们会处理

模拟http请求报文头部

当我们用上述代码去获取一些有价值或技术偏爱者的网页时发现会出现各种问题。 这是因为这些网站识别了http报文中头部的“User-Agent”属性,当然也可能会根据其它条件来判断这是否是人为操作(博主此刻还没有了解这方面的信息)。 也就是我们要伪装我们的爬虫程序看起来像个正常操作的游览器 这里第三句代码就是设置了请求报文头部的“User-Agent”属性,这个属性看起来貌似是游览器信息(此时我并不是很了解http报文)

import urllib.request req=urllib.request.Request('https://www.baidu.com/') req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE") html=urllib.request.urlopen(req) print(html.read())

如果不设置header,读百度只会读到这样的信息↓

别忘了调整字符集

如果你经常从事软件行业的相关操作时 那你一定对字符集非常的熟悉,为了避免我们读到的文本乱码,我们当然要设置它的字符集,我们后续还会讨论这个问题 这里我之所以把代码写的这么乱而不是一层一变量,第一是考验大家的功底,第二也是最重要的是我嫌它浪费时间,emmm…

import urllib.request req=urllib.request.Request('http://yearagain.com/') req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE") html=urllib.request.urlopen(req) print(html.read().decode("utf-8"))

设置字符集后就能正确的显示相关的文本

之后的内容

下篇我们简单介绍一下便捷的第三方库requests 快速了解Python语言和网络爬虫,实例讲解(2):https://blog.csdn.net/PxFuture/article/details/102102017

最新回复(0)