最出圈的编程语言Python爬虫初体验

Python作为这几年的明星编程语言,可以说是最出圈的一门语言。有许多不是从事计算机行业的人都听说过python,小破站、各种搜索引擎的广告轰炸也是让人防不胜防。今天就来体验一下。。。

Python的发展方向主要分为以下几点:

  1. Web开发
  2. 网络爬虫
  3. 数据分析
  4. 人工智能和机器学习
  5. 自动化测试
  6. 自动化运维
  7. ...

今天我们就来体验一下爬虫,正所谓"爬虫爬的好,牢饭不会少。"

环境配置

我们去官网选择好Python版本进行下载,一键安装即可。记得要配置环境变量。www.python.org/

然后在cmd中输入python命令。

看见对应的python信息即环境已经安装完毕。

Requests库

python中的库概念相当于Java中一个个jar包依赖。爬虫,作为一次在互联网上的虫子,我们首先要上网。当然Python也提供传统的网络编程,不过python最方便的就是已经存在好了各种各样的库。所以我们这次就直接安装下载Requests库。requests.readthedocs.io/en/latest/

安装也很方便,类似前端Vue使用npm install命令,python使用的是pip工具。

python -m pip install requests

根据文档我们可以发现使用requests.get()是发送get请求,使用requests.post()是发送post请求。

我们使用get请求百度。

python 复制代码
import requests

response = requests.get("https://www.baidu.com")

print(response.status_code)
print(response.text)
  • 通过status_code查看状态码
  • 通过text查看响应的内容
  • 更多的可以查看官方文档api

接着我们来访问一下豆瓣电影前250榜单

我们把地址变成movie.douban.com/top250

python 复制代码
import requests

response = requests.get("https://movie.douban.com/top250")

print(response.status_code)
print(response.text)

可以发现返回的状态码为418,这个是什么意思呢?我们搜索一下

I'm a teapot.

我只是一个杯具(茶壶)。所以无法处理请求,服务器知道你不是正常行为访问网址的,算一个梗。

这是因为我们使用get请求访问没有配置其他的Http参数,而是使用库默认的导致被网站的反爬虫机制给识别出来了。所以我们要模拟的像我们人通过浏览器访问这个页面一样,这里我们要给它的请求头加上User-Agent即可。那么我们要加上什么值呢?很简单,打开浏览器访问一个页面,然后使用开发者工具,随便查看一个网络请求,将它这个值复制过来。。。

这个请求头python需要的是一个字典,即对应我们Java里面的HashMap,是一个Key-Value结构。参数名为headers

  • Key就是User-Agent
  • Value就是传的值
python 复制代码
import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}

response = requests.get("https://movie.douban.com/top250", headers=headers)

print(response.status_code)
print(response.text)

成功访问~

BeautifulSoup库

当我们能使用代码正确访问网页,并且拿到网页信息,那么剩下的就是解析这些html代码,从中拿到我们所需要的数据了。

Beautiful Soup 是一个 可以从 HTML 或 XML 文件中提取数据的 Python 库。它能用你喜欢的解析器和习惯的方式实现 文档树的导航、查找、和修改。它会帮你节省数小时甚至数天的工作时间。可以称为"靓汤"。

安装方式也十分的简单

pip install beautifulsoup4

使用起来也很简单,只要把我们请求返回的响应内容传入BeautifulSoup,并设置为html.parser解析即可。因为BeautifulSoup同时也支持解析xml。

同时如果我们想获取到页面的第一个meta标签的,内容那么只要使用find()传入标签名即可,默认是找到第一个符合的标签内容。

python 复制代码
import requests
from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}

response = requests.get("https://movie.douban.com/top250", headers=headers)
print(response.status_code)
print(response.text)
soup = BeautifulSoup(response.text, "html.parser")

print(soup.find("meta"))

当然我们不能忘了引入该库。

爬虫抓取豆瓣电影Top250电影名

通过使用这两个库,我们应该就能实现一些简单的数据获取了。这里我们想获取豆瓣电影Top250的电影名。那么我们就应该分析这些电影名在页面上在什么位置呢?

feb2ed66744~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=2560&h=1407&s=395957&e=png&b=fefefe)

我们可以发现它存在div标签class为hd下,span标签class名为title里面,我们只要取第一个名字即可,即第一个title。

python 复制代码
import requests
from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}

response = requests.get("https://movie.douban.com/top250", headers=headers)
soup = BeautifulSoup(response.text, "html.parser")

div = soup.findAll("div", attrs={"class": "hd"})

for d in div:
    span = d.find("span", attrs={"class": "title"})
    print(span.string)
  1. soup.findAll("div", attrs={"class": "hd"} 找到页面中所有div标签并且class属性为hd的。
  2. d.find("span", attrs={"class": "title"}) 在1的前提下,找到里面第一个符合为span标签并且class属性为title的。
  3. span.string获取span标签包含的值。

我们成功获取到了这一页的所有电影名,那么怎么获取到剩下的电影名呢?我们点击第二页

movie.douban.com/top250?star...

它是通过start参数来控制的,那么我们只要将上面的封装成一个方法,循环调用10次,并且改变对应的start参数值即可。当然我们也发现其实这个span只要取第一个即可,因为这三个都有class为title,所以代码可以进行修改。

python 复制代码
import requests
from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}



def douban(page: int) -> None:
    response = requests.get(f'https://movie.douban.com/top250?start={page * 25}&filter=', headers=headers)

    print(response.status_code)

    soup = BeautifulSoup(response.text, "html.parser")

    all_titles = soup.findAll("div", attrs={"class": "hd"})

    for title in all_titles:
        # print(title)
        print(title.find("span").string)


for i in range(10):
    douban(i)

成功获取到豆瓣电影Top250的电影名。

这一路用下来,发现使用python的确是非常简单的,拥有许多强大的库,可以使用非常短的代码且方便的实现小功能。

当然这只是一个初体验,不能说明爬虫就是这么简单。只是对比Java、C、C++实现起来是相对简单方便不少。 所以------ 人生苦短我用Python~~~

相关推荐
封步宇AIGC13 分钟前
量化交易系统开发-实时行情自动化交易-Okex K线数据
人工智能·python·机器学习·数据挖掘
哎呦没13 分钟前
SpringBoot框架下的资产管理自动化
java·spring boot·后端
封步宇AIGC15 分钟前
量化交易系统开发-实时行情自动化交易-Okex交易数据
人工智能·python·机器学习·数据挖掘
2401_8576009516 分钟前
SpringBoot框架的企业资产管理自动化
spring boot·后端·自动化
小爬虫程序猿18 分钟前
如何利用Python解析API返回的数据结构?
数据结构·数据库·python
波点兔20 分钟前
【部署glm4】属性找不到、参数错误问题解决(思路:修改模型包版本)
人工智能·python·机器学习·本地部署大模型·chatglm4
一点媛艺3 小时前
Kotlin函数由易到难
开发语言·python·kotlin
魔道不误砍柴功4 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2344 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
_.Switch5 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops