Web学习周报(1)——python的入门与爬虫实践

211 阅读9分钟

前言

应社团需求,在已有其他语言基础的前提下,简略过完python基础语法后,进行python爬虫实践

一、python的基础语法

安装

要使用 Python ,首先要把它安装到你电脑里。打开 Python 官网 下载安装包。 thon 官网 下载安装包。

image.png 然后打开命令行(在开始菜单搜索“CMD”),看看能不能输出 Python 版本号。如果能输出就证明安装成功

python --version

# 或者
# 大写V前面1个横杠
python -V

编辑器**

我推荐的编辑器有 PyCharm,VS Code 和 Jupyter Notebook。

基础用法

环境搭建好就开始学一下 Python 的基础用法吧,本文只讲基础用法,不涉及高阶用法,学完立刻应用,不会伤到初学者的信心。

打印输出

打印输出内容的方法是 print() ,在括号里放入要输出的内容,运行后就会输出到控制台。

image.png

在 Python 里,创建一个变量的语法如下:

变量名 = 值

注释

注释的作用是告诉别人或者日后的自己,这段代码是用来干嘛的。

在 Python 里,使用 # 表示单行注释,使用6个双引号将内容包裹起来就形成多行注释。

# 这是单行注释

"""
这是多行注释 第1行
这是多行注释 第2行
这是多行注释 第3行
……
"""

数学运算

数学运算主要包括我们义务教育里学的加减乘除,除此之外 Python 还提供了求余等方法。

运算符例子结果
+:加法1 + 12
-:减法1 - 10
*:乘法10 * 220
/:除法10 / 33.3333333333333335。最后这个5是因为浮点数不精确问题导致的,初学者可以先不管这个5。
//:整除10 // 33
%:求余10 % 31
**: 次方2 ** 38。意思是2的3次方。

比较运算

所谓的比较,就是大于、小于、等于……

使用比较运算符会得到一个布尔类型的结果,也就是真或者假。

运算符例子结果
==:等于1 == 10False
!=:不等于1 != 10True
>:大于1 > 1False
>=:大于等于1 >= 1True
<:小于1 < 1False
<=:小于等于1 <= 1True

条件判断

所谓的条件判断,简单来说就是“看情况”。就是“如果...否则...”的句式。

在 Python 里,用 if...else... 表示这个句式。

	代码块1
else:
    代码块2

```需要注意的是,`Python` 是按照缩进来划分代码块的。

举个例子  
```age = 18

if age >= 18:
    print("可以喝一点点酒")
else:
    print("一点酒都不能碰")

输出:"可以喝一点点酒"

条件运算符

条件运算符通常会配合前面说的条件判断一起使用。

Python 里的条件运算符有“与、或、取反”。

运算符例子结果
and:与。and两边的条件都为True时,结果才为True3 > 2 and '雷猴' == '鲨鱼辣椒'False
or:或。or两边的条件只要有一个为True时,结果就为True3 > 2 or '雷猴' == '鲨鱼辣椒'True
not:取反。not 1 > 0False

循环

Python 里有 for 和 while 两种循环。初学者可以先学 for,用熟了再自行了解 while 吧。

for 的用法如下:

for 项 in 序列:
    代码块

列表

列表是用于保存批量的数据类型。 比如我们需要将各种水果存进唯一一个变量就可使用列表

fruit_list=[apple,banana,orange,pee,purplr]

Python 还提供了很多列表相关的方法,比如

# len: 查看列表长度

# append: 在列表末尾添加元素

# insert: 在列表指定位置插入元素

# remove: 删除指定值的元素

# pop: 删除指定索引的元素

字典

字典是用来存储键值对的数据类型,和现实世界中的字典一样。我们打开新华字典,可以根据拼音或者偏旁部首查到到指定的字放在字典里的哪一页。

Python 的字典里,可以通过“键名”找到对应的“值”。“键”是用来定位数据的,重点在定位。“值”是用来存放数据的,重点是存放。

Python 的字典用花括号 {} 表示,键值对用冒号 : 关联。多个键值对用逗号 , 分隔。

grade = {
    "Python": 100,
    "Java": 88,
    "C++": 60,
    "JavaScript": 70
}

要查看字典里的值,可以用键来获取。取值的方法是 字典名[键名]

以上为基础语法介绍,下面介绍爬虫

1、什么是爬虫

Python爬虫是指使用Python语言编写的用于从互联网上抓取数据的程序。爬虫程序可以模拟浏览器的行为,访问网站,获取网页内容,然后从这些内容中提取有用的信息。这些信息可以是文本、图片、视频等。

2、简单的爬虫实现
安装拓展包

想要爬取网页资源,首先需要向网页发送一个http请求(HTTP请求(HyperText Transfer Protocol Request)是客户端(如浏览器)向服务器请求数据或服务时发送的消息。HTTP是基于TCP/IP协议的应用层通信协议,用于从万维网(WWW)服务器传输超文本到本地浏览器的传输协议。),这通常会用到request库。想要安装request库,可以在使用的编辑器中终端输入下方代码

pip install requests

如果安装了aconda则可省略此步骤 安装完成后可以通过

import requests

来调用

发送GET请求

get 请求只从网页获取信息可以通过下方代码向一个网页发送get请求

import requests

# 目标 URL
url = 'http://httpbin.org/get'

# 发送 GET 请求
response = requests.get(url)

# 打印响应的文本内容
print(response.text)

# 打印响应的状态码
print(response.status_code)

# 打印响应的头部信息
print(response.headers)
发送post请求

如果你想发送 POST 请求,可以这样做:

import requests

# 目标 URL
url = 'http://httpbin.org/post'

# 要发送的数据
data = {
    'key1': 'value1',
    'key2': 'value2'
}

# 发送 POST 请求
response = requests.post(url, data=data)

# 打印响应的文本内容
print(response.text)

所谓url通俗点就是网址

在发送get请求之后,我们可以通过print(response.status_code)来获取网页的响应状态,以下是一些状态码的介绍,了解即可

1xx(信息性状态码)

  • 100 Continue:服务器已接收到请求的初始部分,客户端应继续发送剩余部分。

2xx(成功状态码)

  • 200 OK:请求成功,服务器返回所请求的资源。
  • 201 Created:请求成功,服务器创建了新的资源。
  • 202 Accepted:服务器已接受请求,但尚未处理。

3xx(重定向状态码)

  • 301 Moved Permanently:请求的资源已被永久移动到新位置。
  • 302 Found:请求的资源临时被移动到另一个URI。
  • 304 Not Modified:自从上次请求后,资源未修改,可使用缓存的版本。

4xx(客户端错误状态码)

  • 400 Bad Request:服务器无法理解请求格式,客户端请求错误。
  • 401 Unauthorized:请求需要用户的身份认证。
  • 403 Forbidden:服务器理解请求,但是拒绝执行。
  • 404 Not Found:服务器找不到请求的资源。

5xx(服务器错误状态码)

  • 500 Internal Server Error:服务器遇到错误,无法完成请求。
  • 501 Not Implemented:服务器不支持请求的功能,无法完成请求。
  • 503 Service Unavailable:服务器当前无法处理请求,通常是因为服务器过载或维护。
对于一般网站我们都可以成功获得服务器的请求返回,也就是状态码为200,但是在市面上也有许多网页,它们只希望回应由浏览器发出了请求,而不希望回应程序发出的请求,这时我们可以通过修改User-Agent的值来伪装成浏览器,具体操作如下:

1、 随意找到一个网站,右键点击检查,进入network(网络)后刷新网页,就可以看到该网页浏览器发送的各种http请求

image.png 2、点击任意请求,找到user-agent:将其后方数据复制

image.png 3.将我们所复制的内容赋值给headers,并在请求中把headers传入给参数headers:

image.png 这之后就可以将我们的代码伪装成浏览器来发送get请求

####成功伪装成浏览器发送get请求后可以通过

print(response.text)
# 打印响应的html源码

####什么是html可参考文章 [](HTML简介:想成为前端开发者?先从掌握HTML开始!在这个数字化的时代,我们每天都在与网页打交道。你是否曾经好奇过,这 - 掘金 (juejin.cn)) 在学习html的相关概念后可以在编辑器中自己创建一个html后缀的文件来试着自己做一个极为简陋又简陋的网页 附上本人学习的代码


<!DOCTYPE HTML>
<html>
    <head>
        <title>
         页面标签
        </title>
    </head>
    <body>
    <div style="background: blue;">
        <h1>这是一个一级标题目</h1>
        <h2>这是一个二级标签</h2>
        <h6>这是一个六级标题</h6>
        <p>文本文本文本<b>b标签加粗字体</b><i>i标签变为斜体</i><u>u标签内文字加下划线</u><br>此处br标签换行</p>
    </div>
    <img src="http://t7.baidu.com/it/u=1415984692,3889465312&fm=193&f=GIF" width="500px">
    <ol>
        <li>ykk</li>
        <li>tk</li>
        <li>zrh</li>
    </ol>
    <ul>
        <li>lyp</li>
        <li>zjy</li>
        <li>lyx</li>
    </ul>
    <table border="10">
        <thead>
            <tr>
                <td>头部1</td>
                <td>头部2</td>
                <td>头部3</td>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>111</td>
                <td>222</td>
                <td>333</td>
            </tr>
            <tr>
                <td>444</td>
                <td>555</td>
                <td>666</td>
            </tr>
            <tr>
                <td>777</td>
                <td>888</td>
            </tr>
        </tbody>
    </table>
    <a href="http://www.baidu.com" target="_blank">百度链接</a>
    </body>
</html>

在我们用grt获得了网页的html信息之后,我们会发现html信息可以非常复杂,这时候需要用到另外一个外部库Beautifulsoup来解析我们所获得的html信息,安装Beautifulsoup同样可在编辑器终端输入
pip install bs4

之后在代码中的调用

from bs4 import Beautifulsoup

之后我们将get所获得的信息通过Beautifulsoup的构造函数解析,其中需要将features参数设置为"html.parser"

from bs4 import BeautifulSoup
import  requests
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0"}
response=requests.get(f"https://jwxt.sztu.edu.cn/jsxsd/framework/xsMain.htmlx",headers=headers)
html=response.text
soup=BeautifulSoup(html,"html.parser")

这之中soup作为Beautifulsoup的对象具有许多属性和方法来获取信息,如打印print(soup.p)就会返回这html信息中的第一个p标签元素以及其子元素标签,同理如打印print(soup.img)则会返回第一个图片元素

findall方法的使用

Beautifulsoup中有个findall方法,可以帮我们找到所有符合要求的元素,而非上文那般只有第一个元素

soup=BeautifulSoup(html,"html.parser")
all_titles=soup.find_all("span",attrs={"class":"title"})

此代码可找出所有标签为span,且class属性为title的值 在打印时,可以通过打印字符串形式print(xxx.string)来打印文本而省略标签

以上为爬虫的基础知识,最后附带爬取豆瓣电影网前250电影名的实战爬虫python代码

from bs4 import BeautifulSoup
import  requests
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0"}
for start_num in range(0,250,25):
    response=requests.get(f"https://movie.douban.com/top250?start={start_num}",headers=headers)
    html=response.text
    soup=BeautifulSoup(html,"html.parser")
    all_titles=soup.find_all("span",attrs={"class":"title"})
    for title in all_titles:
         title_string=(title.string)
         if  "/"not in title_string:
            print(title_string)