Python 爬虫从入门到(不)入狱学习笔记

爬虫的流程:从入门到入狱

    • 1 获取网页内容
      • 1.1 发送 HTTP 请求
      • 1.2 Python 的 Requests 库
      • 1.2 实战:豆瓣电影 scrape_douban.py
    • 2 解析网页内容
      • 2.1 HTML 网页结构
      • 2.2 Python 的 Beautiful Soup 库
    • 3 存储或分析数据(略)

一般爬虫的基本流程:获取网页内容、解析网页内容、存储或分析数据。

1 获取网页内容

1.1 发送 HTTP 请求

网课链接

(1)定义

HTTP(超文本传输协议)请求是客户端(如网页浏览器)和服务器之间进行通信的一种方式。

(2)方法

  • GET方法:获取数据
  • POST方法:创建数据

(3)HTTP请求例子

在这里插入图片描述

(4)HTTP响应例子

在这里插入图片描述

1.2 Python 的 Requests 库

网课链接

(1)加载所需的包

conda instal python
pip install requests

在这里插入图片描述

(2) 引用和使用 Requests 库

import requests

response = requests.get("http://books.toscrape.com/") # 使用 GET 请求, 参数传入完整的包含协议名的 URL
print(response)
print(response.status_code) # HTTP 状态码
                            # 如果等于 200, 则表示请求成功;
                            # 如果等于 404, 则表示请求失败

状态码 4 开头表示 ”请求失败,客户端错误“

(3)根据状态码判断成不成功获取网页内容

http://books.toscrape.com/:专门给练习爬虫的网站

## 方法一
if response.status_code >= 200 and response.status_code < 400:
    print(response.text) # 获取响应体内容
elif response.status_code >= 400 and response.status_code < 500:
    print("请求失败,客户端错误")
elif response.status_code >= 500:
    print("请求失败,服务器错误")

## 方法二(推荐)
if response.ok:
    print(response.text) # 获取响应体内容
else:
    print("请求失败")

(4)如果想指定某些信息进行更改,可传入 headers 参数

作用:把爬虫程序伪装成正常浏览器

head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
response = requests.get("http://books.toscrape.com/", headers=head)
if response.ok:
    print(response.text) # 获取响应体内容
else:
    print("请求失败")

1.2 实战:豆瓣电影 scrape_douban.py

网课链接

(1)要爬取的网站:https://movie.douban.com/top250

import requests

response = requests.get("https://movie.douban.com/top250")
print(response)
print(response.status_code) # 直接查看返回的状态码

(2)通过定义请求头,把服务器伪装成浏览器

先去网站抄作业获取 User-Agent

在这里插入图片描述

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"
}
response = requests.get("https://movie.douban.com/top250", headers=headers)
print(response.status_code)
print(response.text)

2 解析网页内容

2.1 HTML 网页结构

网课链接

(1)网页的三大技术要素

  • HTML:定义网页的结构和信息
  • CSS: 定义网页的样式
  • JavaScript:定义用户和网页的交互逻辑

(2)最简单的 HTML

<!DOCTYPE HTML> 								# 告知浏览器,文件类型是 HTML
<html>											# 起始标签,表示开始
	<body>										# body 表示文档的主体内容
		<h1>这是一个标题</h1>						# h1 表示最大字号的标题
		<p>这是一段文字这是一段文字这是一段文字</p>	# p 表示文本段落
	</body>
</html>											# 闭合标签,表示结束

网课链接

(3)HTML 的常用标签类型

  • 标题标签
    在这里插入图片描述
  • 文本段落标签
    在这里插入图片描述
  • 换行标签
    在这里插入图片描述
  • 加粗标签
    在这里插入图片描述
  • 斜体标签
    在这里插入图片描述
  • 下划线

在这里插入图片描述

  • 图片标签
    在这里插入图片描述
  • 链接标签
    在这里插入图片描述
  • 容器标签
    在这里插入图片描述
  • 有序列表标签
    在这里插入图片描述
  • 列表元素标签
    在这里插入图片描述
  • 无序列表标签
    在这里插入图片描述
  • 表格标签
<table border="1">			# table 为表格标签; border 为边框标签
	<thead> 				# 表示表格的头部,一般为表格第一行
		<tr> 				# table row, 定义表格行
			<td>表头1</td>
			<td>表头2</td>
		</tr>
	</thead>
	<tbody> 				# 表示表格的主体
		<tr>
			<td>111</td> # table data, 表示单元格内的数据
			<td>222</td>
		</tr>
		<tr>
			<td>333</td>
			<td>444</td>
		</tr>
	</tbody>
</table>

在这里插入图片描述

  • class 属性标签:定义元素类的名称

在这里插入图片描述

(4)HTML 常见标签练习:demo.py

<!DOCTYPE html>                                    <!--声明文件类型-->

<html>                                             <!--整个文档的根-->
  <head>                                           <!--文档的头部-->
    <title>这是一个标题</title>                     <!--定义展示在浏览器选项卡上的标题-->

    

  </head>
  <body>
    <div style="background-color:red;">          <!--style 是 CSS 的内容,可以不用管-->
        <h1>我是一个一级标题</h1>
        <h2>我是一个二级标题</h2>
        <h6>我是一个六级标题</h6>
        <h7>我是一个七级标题</h7>                    <!--其实七级标题不存在,所以不显示-->
        <p>这是一个<b>文本段落</b>这是一个<i>文本段落</i>这是一个文本段落这是一个<u>文本段落</u>这是一个文本段落
            这是一个文本段落这是一个文本段落
        </p>
    </div>

    <p>这是一个<span style="background-color:aqua;">文本段落</span>这是一个<span style="background-color:plum;">文本段落</span>这是一个文本<br>段落这是一个文本段落这是一个文本段落</p>
    <img src="https://t7.baidu.com/it/u=1415984692,3889465312&fm=193&f=GIF" with="500px">
    <a href="https://www.baidu.com" target="_blank">百度链接</a>"   <!--添加超链接,href 参数是 URL,target 参数是打开方式-->

    <ol>                                            <!--定义有序列表-->
        <li>我是第一项</li>
        <li>我是第二项</li>

    </ol>

    <ul>                                            <!--定义无序列表-->
        <li>我是一项</li>
        <li>我是另一项</li>
    </ul>

    <table border="'2" class="data-table">          <!--定义表格-->
        <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>
  </body>

</html>

2.2 Python 的 Beautiful Soup 库

网课链接

(1)下载 Beautiful Soup 库

pip install bs4

(2)导入 Beautiful Soup 并使用

from bs4 import BeautifulSoup
import requests

content = requests.get("http://www.example.com/").text
soup = BeautifulSoup(content, "html.parser") # 第2个参数是解析器,默认是lxml
print(soup.p)

Beautiful Soup 可以解析 HTML 结构,让搜索和修改 HTML 结构变得更加容易
在这里插入图片描述
(3) 浏览器辅助检查标签
实例网站:http://books.toscrape.com/
在这里插入图片描述
(4)实例:导出所有价格

from bs4 import BeautifulSoup
import requests

content = requests.get("http://books.toscrape.com/").text
soup = BeautifulSoup(content, "html.parser") # 第2个参数是解析器,默认是lxml
all_prices = soup.findAll("p", attrs={"class":"price_color"}) # 查找所有p标签,传入可选参数 attrs 来选择想要的内容
for price in all_prices:
    print(price.string[2:])

(5)实例:导出所有书名

all_titles = soup.findAll("h3")
for title in all_titles:
    all_links = title.findAll("a")
    for link in all_links:
        print(link.string)

(6)实例:导出豆瓣 top250 的所有标题

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/130.0.0.0 Safari/537.36"
}

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")  # html: 待解析的HTML文本
                                            # "html.parser": 解析器
    all_titles = soup.findAll("span",attrs={"class":"title"})
    for title in all_titles:
        title_string = title.string
        if "/" not in title_string:
            print(title_string)

3 存储或分析数据(略)

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

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

相关文章

一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测

一区北方苍鹰算法优化创新改进Transformer&#xff01;NGO-Transformer-LSTM多变量回归预测 目录 一区北方苍鹰算法优化创新改进Transformer&#xff01;NGO-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab NGO-Transformer-LST…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第二十集:制作专门渲染HUD的相机HUD Camera和画布HUD Canvas

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作HUD Camera以及让两个相机同时渲染屏幕二、制作HUD Canvas 1.制作法力条Soul Orb引入库2.制作生命条Health读入数据3.制作吉欧统计数Geo Counter4.制作…

Opencv+ROS自编相机驱动

目录 一、工具 二、原理 代码 标定 三、总结 参考&#xff1a; 一、工具 opencv2ros ubuntu18.04 usb摄像头 二、原理 这里模仿usb_cam功能包对Opencv_ros进行修饰&#xff0c;加上相机参数和相机状态&#xff0c;难点在于相机参数的读取。 对于相机参数话题 camera…

计算机网络 | 7.网络安全

1.网络安全问题概述 &#xff08;1&#xff09;计算机网络面临的安全性威胁 <1>计算机网络面临的完全性威胁 计算机网络面临的两大类安全威胁&#xff1a;被动攻击和主动攻击 被动攻击 截获&#xff1a;从网络上窃听他人的通信内容。主动攻击 篡改&#xff1a;故意篡改…

机器翻译基础与模型 之四:模型训练

1、开放词表 1.1 大词表和未登陆词问题 理想情况下&#xff0c;机器翻译应该是一个开放词表&#xff08;Open Vocabulary&#xff09;的翻译任务。也就是&#xff0c;无论测试数据中包含什么样的词&#xff0c;机器翻译系统都应该能够正常翻译。 现实的情况是即使不断扩充词…

ThingsBoard规则链节点:Azure IoT Hub 节点详解

目录 引言 1. Azure IoT Hub 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 数据传输 3.2 数据分析 3.3 设备管理 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台&#xff0c;提供了设备…

MongoDB相关问题

视频教程 【GeekHour】20分钟掌握MongoDB Complete MongoDB Tutorial by Net Ninja MongoDB开机后调用缓慢的原因及解决方法 问题分析&#xff1a; MongoDB开机后调用缓慢&#xff0c;通常是由于以下原因导致&#xff1a; 索引重建&#xff1a; MongoDB在启动时会重建索引…

三种蓝牙架构实现方案

一、蓝牙架构方案 1、hostcontroller双芯片标准架构 手机里面包含很多SoC或者模块&#xff0c;每颗SoC或者模块都有自己独有的功能&#xff0c;比如手机应用跑在AP芯片上&#xff0c;显示屏&#xff0c;3G/4G通信&#xff0c;WiFi/蓝牙等都有自己专门的SoC或者模块&#xff0…

sql工具!好用!爱用!

SQLynx的界面设计简洁明了&#xff0c;操作逻辑清晰易懂&#xff0c;没有复杂的图标和按钮&#xff0c;想对哪部分操作就在哪里点击右键&#xff0c;即使你是数据库小白也能轻松上手。 尽管SQLynx是一款免费的工具&#xff0c;但是它的功能却丝毫不逊色于其他付费产品&#xff…

UE5肉鸽游戏教程学习

学习地址推荐&#xff1a;UE5肉鸽项目实战教程_哔哩哔哩_bilibili

反向代理服务器的用途

代理服务器在网络中扮演着重要的角色&#xff0c;它们可以优化流量、保护服务器以及提高安全性。在代理服务器中&#xff0c;反向代理服务器是一种特殊类型&#xff0c;常用于Web服务器前&#xff0c;它具备多种功能&#xff0c;能够确保网络流量的顺畅传输。那么&#xff0c;让…

面试经典 150 题:205,55

205. 同构字符串 【解题思路】 来自大佬Krahets 【参考代码】 class Solution { public:bool isIsomorphic(string s, string t) {map<char, char> Smap, Tmap;for(int i0; i<s.size(); i){char a s[i], b t[i];//map容器存在该字符&#xff0c;且不等于之前映射…

信创改造 - TongRDS 替换 Redis

记得开放 6379 端口哦 1&#xff09;首先在服务器上安装好 TongRDS 2&#xff09;替换 redis 的 host&#xff0c;post&#xff0c;passwd 3&#xff09;TongRDS 兼容 jedis # 例如&#xff1a;更改原先 redis 中对应的 host&#xff0c;post&#xff0c;passwd 改成 TongRDS…

嵌入式工程师面试笔试总结——day1

第一章、进程与线程 1、什么是进程、线程&#xff0c;有什么区别&#xff1f; 进程是资源&#xff08; CPU 、内存等&#xff09;分配的基本单位&#xff0c;线程是 CPU 调度和分配的基本单位&#xff08;程序执行的最小单 位&#xff09;。同一时间&#xff0c;如果CPU 是单…

算法之区间和题目讲解

题干 难度&#xff1a;简单 题目分析 题目要求算出每个指定区间内元素的总和。 然而&#xff0c;区间在输入的最下面&#xff0c;所以按照暴力破解的思路&#xff0c;我们首先要遍历数组&#xff0c;把它的值都存进去。 然后&#xff0c;遍历下面的区间&#xff0c;从索引a…

泷羽sec-linux

基础之linux 声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团…

用 Python 从零开始创建神经网络(十):优化器(Optimizers)(持续更新中...)

优化器&#xff08;Optimizers&#xff09; 引言1. 随机梯度下降/Stochastic Gradient Descent (SGD)2. 学习率&#xff08;Learning Rate&#xff09;3. 学习率衰减&#xff08;Learning Rate Decay&#xff09;4. 带动量的随机梯度下降法&#xff08;Stochastic Gradient Des…

UE5安装教程及设置

学习链接&#xff1a;01-安装UE5及设置_哔哩哔哩_bilibili

如何利用Python爬虫精准获得1688店铺的所有商品信息

在数字化时代&#xff0c;数据的价值日益凸显&#xff0c;尤其是在电商领域。1688作为中国领先的B2B电商平台&#xff0c;拥有丰富的商品数据。对于电商企业来说&#xff0c;获取这些数据对于市场分析、竞品研究等具有重要意义。本文将详细介绍如何使用Python编写爬虫程序&…

电子学习中的关键游戏化元素

游戏化彻底改变了电子学习领域&#xff0c;提供了一种使学习具有吸引力、互动性和有效性的方法。通过将类似游戏的功能集成到教育平台中&#xff0c;教育工作者可以增强动力&#xff0c;提高知识记忆&#xff0c;并创造动态的学习体验。游戏化的关键要素为设计与学习者产生共鸣…