• python-(6-2)爬虫---小试牛刀,获得网页页面内容


    一 需求

    爬取得到某搜索引擎官网的网站,并能在pycharm中打开

    二 知识点

    HTTP协议,即超文本传输协议,浏览器和服务器之间数据交换的基本协议。

    服务器渲染:在服务器端,把数据和html整合在一起,统一返回给浏览器,在页面源代码能看到数据。

    客户端渲染:第一次请求只要一个HTML骨架,第二次请求拿到数据,并进行数据展示,在页面源代码中,看不到数据。

    请求的组成部分

    请求行:请求方式,请求url地址,协议
    请求头:服务器需要的附加信息
    请求体:请求参数
    
    • 1
    • 2
    • 3

    响应的组成部分

    状态行:状态码,协议
    响应头:客户端需要的附加信息
    响应体:客户端真正需要的内容
    
    • 1
    • 2
    • 3

    三 分析

    1.从urllib库中导入urlopen,使用它来打开url
    2.给需要爬虫的网页url赋值,再赋值给一个变量,可以得到对网站请求的相应信息
    3.将得到相应的信息用写入的方式,打开一个新的文件,并用对应的编码方式进行解码
    4.打开爬取到的网页,获取页面源代码,并关闭访问的请求

    四 代码

    # 导入需要的库
    from urllib.request import urlopen
    
    # 用url变量获得官网的网址
    url = "http://www.baidu.com"
    
    # 得到访问网站的响应信息
    resp = urlopen(url)
    
    # 用不关闭文件的方式,打开得到的html文件
    # 读取内容时用utf-8编码,写入数据时当然也要用utf-8解码,否则打开的网页中文会变成乱码
    with open("baidu.html",mode="w",encoding="utf-8") as f:
    
        # 用写入的方式读取网页内容,并根据源码中显示的编码方式进行解码
        f.write(resp.read().decode("utf-8"))
    
    # 获得文件内容后,表示获取成功
    print("over!!!!!!!!!!")
    
    # 最后记得关闭访问请求,就像打开文件后需要关闭一样
    resp.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    上述代码是完整的获得网站内容的源代码。

    在执行代码后,同一个目录的路径下会产生一个“baidu.html"文件,用谷歌浏览器打开这个文件,就可以得到网站官网的页面内容。

    五 补充说明

    1)在打开文件时使用的参数encoding="utf-8"与解码的参数decode("utf-8")一般要加上的。苹果电脑MAC系统的字符集编码解码默认是utf-8,但笔者的Windows系统字符集编码和解码默认是GBK,因此需要在此处添加参数设置。

    2)此处笔者利用with open() as f打开文件,不需要考虑关闭文件;但如果如用open()函数打开网页,需要再加一行代码f.close()关闭文件。

    3)在这里需要注意的是,下面的代码在执行后,得到的是网站官网源代码的内容,而不是百度网页的内容信息(如下图)。

    # 导入需要的库
    from urllib.request import urlopen
    
    # 用url变量获得官网的网址
    url = "http://www.baidu.com"
    
    # 得到访问网站的响应信息
    resp = urlopen(url)
    
    # 输出获得的相应信息
    print(resp.read())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    如何优雅安装Zabbix5.0
    Android-Handler源码解析-Looper
    【算法3.12】二分图 - 匈牙利算法 NTR算法(完结)
    Java Web 7 JavaScript 7.9 RegExp对象
    OpenCV安装、QT、VS配置项目设置
    java,python遍历文件夹与子文件夹
    Java-day14(多线程)
    [SSTF 2022] 三星安全论坛的小比赛错过了
    【PHP】医院HIS手术麻醉临床信息管理系统源码 实现术前、术中、术后全流程管理
    Matlab提取excel数据及处理的实操举例
  • 原文地址:https://blog.csdn.net/oldboy1999/article/details/127751410