Python学习之爬虫基础

目录

  • 文章声明⭐⭐⭐
  • 让我们开始今天的学习吧!
    • requests库的基本使用
    • BeautifulSoup解析HTML
    • 我们还需要学习什么呢?


文章声明⭐⭐⭐

  1. 该文章为我(有编程语言基础,非编程小白)的 Python爬虫自学笔记
  2. 知识来源为 B站UP主(GenJi是真想教会你)的Python爬虫课程视频,归纳为自己的语言与理解记录于此并加以实践,爬取的网站为豆瓣电影和一个专门用于联系爬虫的书籍网站,但只用于笔记用途,合法又正规嗷家人们
  3. 关于爬虫,知识基础、概念我都不会记录于此,更多的是记录实践,即以具体实操代码的形式展现给大家
  4. 不出意外的话,我大抵会 持续更新
  5. 想要了解前端开发(技术栈大致有:Vue2/3、微信小程序、uniapp、HarmonyOS、NodeJS、Typescript)与Python的小伙伴,可以关注我!谢谢大家!

让我们开始今天的学习吧!

requests库的基本使用

小尝试

# 导入requests,当然你得确保pip安装了这个库
import requests
# 发送get请求
response = requests.get("http://books.toscrape.com/")
# 输出一下试试
print(response)
# 输出状态码
print(response.status_code)-------------------------------------
<Response [200]>
200

加以判断来完善

# 导入requests
import requests
# 发送get请求
response = requests.get("http://books.toscrape.com/")
# 加以判断完善一下
if response.status_code >= 200 and response.status_code < 400:
    print("可以获取内容")
    print(response)
elif response.status_code >= 400 and response.status_code < 500:
    print("请求失败,客户端错误")
elif response.status_code >= 500:
    print("请求失败,服务器错误")
else:
    print("未知错误")
-------------------------------------
可以获取内容
<Response [200]>

使用response的ok属性来简化上一个例子

# 导入requests,当然你得确保pip安装了这个库
import requests
# 发送get请求
response = requests.get("http://books.toscrape.com/")
# 使用response的ok属性来简化上一个例子
if response.ok:
    print("可以获取内容")
    print(response)
else:
    print("请求失败")
-------------------------------------
可以获取内容
<Response [200]>

使用response的text属性来获取响应体的内容

# 导入requests,当然你得确保pip安装了这个库
import requests
# 发送get请求
response = requests.get("http://books.toscrape.com/")
# 使用response的ok属性来判断
if response.ok:
    print("可以获取内容")
    print(response.text)
else:
    print("请求失败")
-------------------------------------
可以获取内容
<!DOCTYPE html>
<!--[if lt IE 7]>      <html lang="en-us" class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html lang="en-us" class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html lang="en-us" class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en-us" class="no-js"> <!--<![endif]-->
    <head>
        <title>
    All products | Books to Scrape - Sandbox
........................(响应体内容太多了,这里就不加以展示了)

requests库的函数帮我们自动生成了请求头的内容,当然我们也可以自己书写请求头,一般自行书写请求头用来把我们的爬虫程序伪装成正常浏览器,pycharm中代码如下:

# 导入requests,当然你得确保pip安装了这个库
import requests
# 自行书写header请求头,对象格式为字典
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
response = requests.get("http://books.toscrape.com/", headers=header)
# 使用response的ok属性来判断
if response.ok:
    print("可以获取内容")
    print(response.text)
else:
    print("请求失败")

BeautifulSoup解析HTML

首先安装bs4这个库,再导入其中的BeautifulSoup这个类,我们先使用它的对象的p属性,来获取第一个p标签以及其子标签的全部内容,pycharm中代码如下:

# 导入requests
import requests
# 从bs4这个库中导入BeautifulSoup这个类
from bs4 import BeautifulSoup
# 自行书写header请求头,对象格式为字典
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
# 获取响应体内容
content = requests.get("https://movie.douban.com/top250", headers=header).text
# BeautifulSoup是个构造函数,我们来创建BeautifulSoup的对象
soup = BeautifulSoup(content,"html.parser")
# 获取第一个p标签以及其子标签的全部内容
print(soup.p)
-------------------------------------
<p class="appintro-title">豆瓣</p>

类似p属性,还有img、h1、div、span等等属性,都是获取HTML中的其第一个标签以及其子标签的全部内容,学过HTML的同学应该大致能明白,这些所谓的属性其实就是HTML中的一个个标签名

使用findAll方法来精准查询,string属性用于只获取标签中的内容,首先我们先尝试着获取一下当前页面每个电影的评分,图片和代码如下:
网页图片

# 导入requests
import requests
# 从bs4这个库中导入BeautifulSoup这个类
from bs4 import BeautifulSoup
# 自行书写header请求头,对象格式为字典
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
# 获取响应体内容
content = requests.get("https://movie.douban.com/top250", headers=header).text
# BeautifulSoup是个构造函数,我们来创建BeautifulSoup的对象
soup = BeautifulSoup(content,"html.parser")
# 获取所有电影的评分,下面findAll方法是用来精准查询符合条件的标签,第一个参数为需要查询的标签名,第二个参数为拿来匹配的属性,是一个字典对象,findAll方法返回的是一个数组
movie_rating = soup.findAll("span",attrs={"class": "rating_num"})
# 遍历
print(movie_rating)
for rating in movie_rating:
    print(rating.string)
-------------------------------------
[<span class="rating_num" property="v:average">9.7</span>, <span class="rating_num" property="v:average">9.6</span>, <span class="rating_num" property="v:average">9.5</span>, <span class="rating_num" property="v:average">9.5</span>, <span class="rating_num" property="v:average">9.4</span>, <span class="rating_num" property="v:average">9.4</span>, <span class="rating_num" property="v:average">9.5</span>, <span class="rating_num" property="v:average">9.4</span>, <span class="rating_num" property="v:average">9.4</span>, <span class="rating_num" property="v:average">9.5</span>, <span class="rating_num" property="v:average">9.4</span>, <span class="rating_num" property="v:average">9.4</span>, <span class="rating_num" property="v:average">9.3</span>, <span class="rating_num" property="v:average">9.2</span>, <span class="rating_num" property="v:average">9.3</span>, <span class="rating_num" property="v:average">9.3</span>, <span class="rating_num" property="v:average">9.2</span>, <span class="rating_num" property="v:average">9.3</span>, <span class="rating_num" property="v:average">9.6</span>, <span class="rating_num" property="v:average">9.2</span>, <span class="rating_num" property="v:average">9.4</span>, <span class="rating_num" property="v:average">9.3</span>, <span class="rating_num" property="v:average">9.3</span>, <span class="rating_num" property="v:average">9.2</span>, <span class="rating_num" property="v:average">9.1</span>]
9.7
9.6
9.5
9.5
9.4
9.4
9.5
9.4
9.4
9.5
9.4
9.4
9.3
9.2
9.3
9.3
9.2
9.3
9.6
9.2
9.4
9.3
9.3
9.2
9.1

其次,find方法可以获取第一个符合条件的标签,我们尝试着获取一下当前页面每个电影的名字,这比评分稍微难一点,图片和代码如下:
网页图片

# 导入requests
import requests
# 从bs4这个库中导入BeautifulSoup这个类
from bs4 import BeautifulSoup
# 自行书写header请求头,对象格式为字典
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
# 获取响应体内容
content = requests.get("https://movie.douban.com/top250", headers=header).text
# BeautifulSoup是个构造函数,我们来创建BeautifulSoup的对象
soup = BeautifulSoup(content,"html.parser")
# 获取所有电影的名字
movie_div_list = soup.findAll("div", attrs={"class": "hd"})
for div in movie_div_list:
    name = div.find("a").find("span").string
    print(name)
-------------------------------------
肖申克的救赎
霸王别姬
阿甘正传
泰坦尼克号
这个杀手不太冷
千与千寻
美丽人生
星际穿越
盗梦空间
辛德勒的名单
楚门的世界
忠犬八公的故事
海上钢琴师
三傻大闹宝莱坞
放牛班的春天
机器人总动员
疯狂动物城
无间道
控方证人
大话西游之大圣娶亲
熔炉
教父
触不可及
当幸福来敲门
寻梦环游记

接下来,我们尝试着获取全部的Top250电影名,pycharm中代码如下:

# 导入requests
import requests
# 从bs4这个库中导入BeautifulSoup这个类
from bs4 import BeautifulSoup
# 自行书写header请求头,对象格式为字典
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
# 了解到豆瓣电影Top250网址的规律为:
# https://movie.douban.com/top250?start=0&filter=
# https://movie.douban.com/top250?start=25&filter=
# https://movie.douban.com/top250?start=50&filter=
# 创建一个装有25倍数的排行数字的数组
num_list = range(0, 250, 25)
# 循环每一个网页做爬虫
for num in num_list:
    # 获取响应体内容
    content = requests.get(f"https://movie.douban.com/top250?start={num}&filter=", headers=header).text
    # BeautifulSoup是个构造函数,我们来创建BeautifulSoup的对象
    soup = BeautifulSoup(content, "html.parser")
    # 获取所有电影的名字
    movie_name_list = soup.findAll("span", attrs={"class": "title"})
    for span in movie_name_list:
        name = span.string
        if "/" not in name:
            print(name)
-------------------------------------
肖申克的救赎
霸王别姬
阿甘正传
泰坦尼克号
这个杀手不太冷
千与千寻
美丽人生
星际穿越
盗梦空间
辛德勒的名单
楚门的世界
忠犬八公的故事
海上钢琴师
三傻大闹宝莱坞
放牛班的春天
机器人总动员
疯狂动物城
无间道
......(太多了不展示全部了)

我们还需要学习什么呢?

  • 正则表达式:可以根据自己自定义的规则去爬取信息
  • 多线程:让不同线程同时爬取多个页面,增加爬虫的效率
  • 数据库:爬取的数据存储在数据库中
  • 数据分析:爬取的数据拿来分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/251545.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JVM从入门到实战】(五)类加载器

一、什么是类加载器 类加载器&#xff08;ClassLoader&#xff09;是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术。 类加载器只参与加载过程中的字节码获取并加载到内存这一部分。 二、jdk8及之前的版本 类加载器分为三类&#xff1a; 启动类加载器-加载Ja…

2043杨辉三角(C语言)

目录 一&#xff1a;题目 二&#xff1a;思路分析 三&#xff1a;代码 一&#xff1a;题目 二&#xff1a;思路分析 1.通过杨辉三角&#xff0c;不难发现中间的数等于肩头两个数之和 2.但是当我们的输出结果&#xff0c;与杨辉三角的形式有所不同&#xff0c;但是我们可以找…

【Linux】高性能 Web 服务器 Nginx 安装教程(Ubuntu 22.04)

前言 Nginx 是一个高性能的开源 Web 服务器软件&#xff0c;也可以用作反向代理服务器、负载均衡器、HTTP 缓存以及作为邮件代理服务器等。Nginx 以其高性能、稳定性和丰富的功能而闻名&#xff0c;被广泛用于构建高流量网站和应用程序。 步骤 更新软件源 首先需要更新系统的软…

AttributeError: module ‘edge_tts‘ has no attribute ‘Communicate‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

pycdc配置和使用

配置 使用的kali2023版本 安装cmake pip install cmake 下载pycdc git clone https://github.com/zrax/pycdc 切换到pycdc目录 cd pycdc 进行cmake cmake CMakeLists.txt make 使用 显示帮助信息 ./pycdc -h 显示帮助信息 反编译 ./pycdc /home/kali/Desktop/main…

瑞萨单片机学习:RA4M3单片机 BOOTloader升级 跳转到主程序 主程序无法执行问题

背景&#xff1a; 使用瑞萨的RA4M3单片机编写BOOT引导程序进行测试&#xff0c;在BOOT程序跳转到主程序时&#xff0c;主程序无法执行。本文介绍了问题的定位和解决方法。 运行开发环境介绍 硬件环境 RA4M3 官方开发板 J-LINK V11 开发板自带 软件开发环境 e2 studio VSCODE…

【MySQL基础】MySQL基本操作详解

系列文章目录 第1篇&#xff1a;【MySQL基础】MySQL介绍及安装 第2篇&#xff1a;【MySQL基础】MySQL基本操作详解 文章目录 ✍1&#xff0c;数据库操作     &#x1f50d;1.1,查看数据库     &#x1f50d;1.2,创建数据库     &#x1f50d;1.3,选择数据库    …

探索太空深渊:计算机技术在航天领域的无限可能

探索太空深渊&#xff1a;计算机技术在航天领域的无限可能 一、引言 在21世纪的科技浪潮中&#xff0c;太空探索和计算机技术无疑是两个最为璀璨夺目的领域。它们各自的发展都足以改变人类社会的未来&#xff0c;而当这两者交汇时&#xff0c;所激发出的创新和变革更是超乎我…

算法通关第十九关-青铜挑战理解动态规划

大家好我是苏麟 , 今天聊聊动态规划 . 动态规划是最热门、最重要的算法思想之一&#xff0c;在面试中大量出现&#xff0c;而且题目整体都偏难一些对于大部人来说&#xff0c;最大的问题是不知道动态规划到底是怎么回事。很多人看教程等&#xff0c;都被里面的状态子问题、状态…

Windows 10如何关闭系统自动更新(实用教程)

本章教程&#xff0c;用最简洁的方式介绍在windows10中如何关闭系统自动更新。 目录 一、关闭自动更新服务 二、关闭自动更新组策略 一、关闭自动更新服务 1、 winr 2、services.msc 3、找到并双击 Windows Update 修改启动类型为禁用 二、关闭自动更新组策略 1、winr 2、gp…

社交网络分析2(下):社交网络情感分析的方法、挑战与前沿技术

社交网络分析2&#xff08;下&#xff09;&#xff1a;社交网络情感分析的方法、挑战与前沿技术 写在最前面7. 词嵌入&#xff08;word embedding&#xff09;的主要目的是什么&#xff1f;结合某方法简要地说明如何实现词嵌入。主要目的实现方法示例&#xff1a;GloVe案例分析…

python深拷贝和浅拷贝

文章目录 浅拷贝深拷贝 刷完这60个标准库模块&#xff0c;成为Python骨灰级玩家 深拷贝和浅拷贝都是用于复制对象的概念。浅拷贝在复制对象时&#xff0c;仅复制其引用&#xff0c;而非复制对象本身。这意味着原对象和新对象都指向相同的内存地址&#xff0c;修改一个对象会影…

linux 文本信息查询grep;控制命令执行和管道操作符号

1、grep grep "keyword" /path/to/logfile获取查询结果最后一行 grep "runs/detect/train" test4.log | tail -n 12、linux控制命令执行和管道操作符号 &、|、; 和 &&、》、>、< ##例子&#xff1b;wandb disabled && yolo …

new一个对象

1.自己直接调用 function Person(name, age) {this.name name;this.age age;}let a1 new Person("小明", 20);let a2 new Person("小菜", 25);console.log(a1); 打印的对象: 2.自己模拟一个 function Person(name, age) {this.name name;this.age a…

当OneNote不同步时,你需要做些什么让其恢复在线

OneNote笔记本无法同步的原因有很多。由于OneNote使用OneDrive将笔记本存储在云中,因此可能会出现互联网连接问题,与多人联机处理笔记本时会出现延迟,以及从不同设备处理同一笔记本时会发生延迟。以下是OneNote不同步时的操作。 注意:本文中的说明适用于OneNote for Windo…

深度学习小白学习路线规划

作为深度学习的初学者&#xff0c;以下是一个建议的学习路线&#xff0c;可以帮助你逐步掌握图像分类、目标检测与跟踪、实例分割和姿态估计&#xff1a; 掌握这些&#xff0c;计算机视觉算是入门了&#xff01; 1. 基础知识&#xff1a; 学习Python编程语言&#xff0c;它是…

买手机,该买二手旗舰,还是买新款中端机?答案让人意外

如今的数码博主推荐手机的时候&#xff0c;都喜欢拿各种硬件参数来比较&#xff0c;而手机企业高管则喜欢在比不过硬件的时候谈体验&#xff0c;对于消费者来说&#xff0c;那么到底硬件参数重要&#xff0c;还是体验更重要&#xff1f; 笔者因为工作需要&#xff0c; 这两年买…

Idea maven打包时 报错 illegalArgumentException: Malformed \uxxxx encoding 解决方法

1 改变打包命令重新打包 在maven打包命令上加入 -e -X 2 找到报错类和方法 可以看到是 java.util.Properties#loadConvert类方法中有个throw new IllegalArgumentException( "Malformed \\uxxxx encoding.")&#xff0c;在此打断点 3 以Debug方式重新运行maven…

猿人学19题(原比赛平台)

这道题给我搞得有点懵了&#xff0c;我现在还没发现他到底要考察什么&#xff0c;这边我直接协商我的sessionid请求是直接就成功的。&#x1f602; 依旧是分析请求方式&#xff0c;抓包到返回数据的位置 现在可以知道这些数据是ajax返回的&#xff0c;请求的参数是page&#x…

Win7系统桌面出现白色透明框的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…