Python爬虫 远比你想象中的简单 (从零开始 至 实战爬取b站视频信息)

一、什么是爬虫?

爬虫是一种自动化程序,用于在互联网上自动浏览和访问网页,收集网页上的信息。爬虫的基本工作流程包括选择种子URL,爬取网页内容,解析网页,跟踪链接,存储信息,去重和调度。爬虫在信息收集和分析中起着重要作用,但需要遵守网站规则,合理控制访问速度和频率,避免对网站造成压力或侵犯隐私。

爬虫的基本工作流程通常包括以下几个步骤:

  1. 选择种子URL:爬虫从一个或多个起始网页(种子URL)开始工作。这些网页通常是具有较高重要性的页面,例如主要搜索引擎的首页。

  2. 爬取网页内容:爬虫访问网页,下载网页内容,并从中提取信息。这通常涉及到处理HTML、XML、JSON等数据格式。

  3. 解析网页:提取出的信息通常需要进行解析和处理,以便于存储和进一步的分析。这可能涉及到正则表达式匹配、HTML解析、自然语言处理等技术。

  4. 跟踪链接:爬虫会分析网页中的链接,并选择性地跟随这些链接,以发现新的网页。这个过程称为跟踪。

  5. 存储信息:爬虫将提取到的信息存储到数据库或文件中,以便于后续的查询和分析。

  6. 去重:为了避免重复访问相同的网页,爬虫通常会有去重策略,以保证每个网页只被访问一次。

  7. 调度:爬虫可能会有一个调度器,它负责管理多个爬虫实例的工作,协调它们的工作负载,以及处理爬虫间的通信。

二、简单示例

安装网络请求模块

pip install requests

示例1:

直接爬取网站数据

# 导入requests库,用于发起网络请求
import requests

# 向目标网站发起GET请求
response = requests.get('http://books.toscrape.com/')

# 检查响应状态码是否为200,即请求是否成功
if response.ok:
    # 如果请求成功,打印响应的文本内容
    print(response.text)
else:
    # 如果请求失败,打印错误信息
    print('请求失败')

三、添加请求头后进行爬虫

有些网站会判断你是否是浏览器或者程序进行访问;

可以使用打印response.status来查看是否可以直接爬取该网站的信息;

如果无法直接爬取,这时可以通过设置 请求头headr 的方式将程序伪装为浏览器的方式进行访问

示例2:

例如在b站上无法直接爬取数据的

所以打开通过右击点击检查,然后点击Network中的任意一个请求,将请求头中的User-Agent替换为请求中的User-Agent的内容即可爬取数据了

示例代码:

import requests
requestHead = {"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 Edg/122.0.0.0"}
response = requests.get('https://www.bilibili.com/',headers = requestHead)
if response.ok:
    print(response.text)
else:
    print('请求失败')

四、Beautiful Soup库解析html文件

爬取到了网站的信息,不过信息太多了,

下载Beautiful Soup库:

pip install bs4

示例代码:”

# 导入所需库
from bs4 import BeautifulSoup
import requests

# 设置请求头
requestHead = {"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 Edg/122.0.0.0"}

# 获取页面内容
content = requests.get("https://www.bilibili.com/", headers=requestHead).text

# 使用BeautifulSoup解析HTML内容
soup = BeautifulSoup(content, "html.parser")

# 查找所有h3标签
all_titles = soup.findAll("h3")

# 遍历所有h3标签,查找其中的a标签
for title in all_titles:
    link = title.find("a")
    # 打印a标签的文本内容
    print(link.string)

四、实战(获取b站视频的标题和链接)

通过检查其b站的某个标题的源代码,可以知道class的值

 使用的是检查中左上角的第一个进行快速定位所显示组件的源代码

通过点击某个商品可以知道该class的值 ,以及所使用的标签

 通过观察可以知道 视频链接就在所获取class div标签下的子标签:a中,可以通过获取all_infos,循环遍历info,获取其下的a标签,但是视频图片是div标签的后代标签:picture中,所以再对单个info根据class获取对应的picture标签,最后将其都进行循环打印出来 示例代码:

# 导入所需库
from bs4 import BeautifulSoup
import requests

# 设置请求头
requestHead = {"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 Edg/122.0.0.0"}

# 获取页面内容
content = requests.get("https://www.bilibili.com/", headers=requestHead).text

# 使用BeautifulSoup解析HTML内容
soup = BeautifulSoup(content, "html.parser")

#获取信息
all_info = soup.findAll("div",attrs={"class","bili-video-card__wrap __scale-wrap"})

# 遍历视频信息并打印链接和图片
for info in all_info:

    # 获取视频的链接
    video_link = info.a['href']
    print(f"视频链接: {video_link}")

    # 获取视频的picture标签内容
    video_image_picture = info.findAll("picture",attrs={"class","v-img bili-video-card__cover"})

    if video_image_picture:
        # 获取图片的src属性
        video_image_src = video_image_picture[0].img['src']
        print(f"视频图片链接:{video_image_src}")
        print() 

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值