一名前端工作人员的python爬虫实践记录【1】——通过urllib封装请求

178 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

光阴似箭,日月如梭,转眼间已经学习编程三年有余,而最近在b站学习如何实现爬虫。 让我本人拓展一下,基本的思路是使用python+mongoDB的思路实践爬虫,此文用作记录,供复习用。

项目思路

python爬虫一共分为三个步骤,那就是:

  • 爬取网页
  • 解析数据
  • 保存数据 下面开始一一实践。。。
Let's Go!

爬取网页

爬取网页首先我们需要构建一个request对象,用作发送请求。
构造请求需要导入一个名为urllib的包

什么是urllib

urllib是一个包含了数个与URL请求有关的python
它包含了四个主要模块:
urllib.request:打开和阅读URL
urllib.error:关于urllib.request异常
urllib.parse:用于解析URL
urllib.robotparser:解析robots.txt文件
更多解析===========>文档点我

构建的resquest的代码如下:


    # 模拟请求头
    # 构建请求 构建requset对象
`    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
    }
    # request = urllib.request.Request(url, headers=head)
    request = urllib.request.Request(url, headers=head)

解析respone:

    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
        # print(html)
    except urllib.error.URLError as error:
        print("urllib.error.URLError!")
        print(error.__str__())
    except urllib.error.HTTPError as error:
        print("urllib.error.HTTPError!")
        print(error.__str__())
    except socket.timeout as error:
        print("socket.timeout!")
        print(error.__str__())

这里有几个注意的点:

  1. html = response.read().decode("utf-8")这行代码要注意设定解码格式,哪怕在文件首行加上了# -*- encoding: utf-8 -*-还是需要设定解码的。
  2. 出于职业习惯,我的ide是VScode 然后使用的是code runner插件运行程序。
    这时候如果进行了print(html)可能会出现乱码。这时候需要在检查code runner的编码方式。

修改coderunner的编码格式

  1. 在拓展里找到coderunner,点击设置 image.png
  2. 在弹出的界面中找到Executor Map并单击"在settings.json中编辑",打开用户设置的json文件。 image.png
  3. 加入代码:
    "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 保存即可

下集预告

完成了请求封装之后,下一步的解析数据该怎么处理呢,容我暂时卖个关子,明天待我揭晓!
如果本文对您有帮助,可以给一个免费的赞吗?谢谢!