最出圈的编程语言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~~~

相关推荐
SsummerC11 分钟前
【leetcode100】二叉树的中序遍历
数据结构·python·算法·leetcode
badogyang14 分钟前
python脚本,读取当前目录文件名,写入excel表格,并给对应文件名分配mac
python·excel
懒大王爱吃狼17 分钟前
【Python】基于blind-watermark库添加图片盲水印
人工智能·python·opencv·计算机视觉·自动化·python基础·python教程
半夏知半秋38 分钟前
python对mongodb的增删查改
服务器·开发语言·笔记·python·学习·mongodb
LemonDus38 分钟前
记录一次线上服务OOM排查
后端·golang·技术问题
jerry6091 小时前
NLP CH3复习
人工智能·python·自然语言处理
今晚打老虎z1 小时前
ASP.NET Core 中的响应压缩中间件
后端·中间件·asp.net
stark张宇2 小时前
Mysql的安全管理
数据库·后端·mysql
码农张思壮2 小时前
使用 AI 编码将路书 GPX 文件导入高德地图生成路线的尝试
后端·python·openai
Forerunner2 小时前
websocket+springboot+vue3实现服务器向客户端推送数据
后端·websocket