Python 爬虫入门(一):从零开始学爬虫 「详细介绍」

news2024/11/24 13:07:42

Python 爬虫入门(一):从零开始学爬虫 「详细介绍」

  • 前言
    • 1.爬虫概念
      • 1.1 什么是爬虫?
      • 1.2 爬虫的工作原理
    • 2. HTTP 简述
      • 2.1 什么是 HTTP?
      • 2.2 HTTP 请求
      • 2.3 HTTP 响应
      • 2.4 常见的 HTTP 方法
    • 3. 网页的组成
      • 3.1 HTML
        • 3.1.1 HTML 基础结构
      • 3.2 CSS
        • 3.2.1 CSS 示例
      • 3.3 JavaScript
        • 3.3.1 JavaScript 示例
    • 4. 使用 Python 进行 Web 爬虫
      • 4.1 常用的 Python 库
      • 4.2 安装所需库
      • 4.3 编写一个简单的爬虫
        • 4.3.1 示例代码
      • 5. 处理复杂的网页
        • 5.1 使用 Playwright 示例
    • 6. 编写一个完整的爬虫项目
      • 6.1 项目要求
      • 6.2 项目步骤
        • 6.2.1 示例代码
      • 7. 特别注意事项
      • 8. robots.txt 文件是什么?
    • 总结

前言

警告声明:本文提供的信息和示例代码仅供学习和教育目的,请小伙伴们在遵守相关法律法规和网站政策的前提下使用。

1.爬虫概念

1.1 什么是爬虫?

网络爬虫,也称为网络蜘蛛、网络机器人,是一种自动化脚本或程序,用于自动浏览互联网并收集数据。

爬虫可以帮助我们从网页中提取信息,从而实现数据采集、信息检索、网站分析等功能。

1.2 爬虫的工作原理

在这里插入图片描述

  1. 发送请求:爬虫向目标网站发送 HTTP 请求。
  2. 获取响应:目标网站返回 HTTP 响应,包含请求的网页内容。
  3. 解析数据:爬虫解析网页内容,提取所需数据。
  4. 存储数据:将提取的数据存储在本地或数据库中。

2. HTTP 简述

2.1 什么是 HTTP?

HTTP(HyperText Transfer Protocol):是用于在 Web 浏览器和 Web 服务器之间传递信息的协议。它是一种基于请求-响应模式的协议,客户端发送请求,服务器返回响应。
在这里插入图片描述

2.2 HTTP 请求

HTTP 请求由以下几个部分组成:

  1. 请求行:包括请求方法(如 GET、POST)、请求 URL 和 HTTP 版本。
  2. 请求头:包含有关客户端环境的信息和请求体的元数据。
  3. 请求体:在 POST 请求中,包含要发送到服务器的数据。

2.3 HTTP 响应

HTTP 响应由以下几个部分组成:

  1. 状态行:包括 HTTP 版本、状态码和状态描述。
  2. 响应头:包含有关服务器环境的信息和响应体的元数据。
  3. 响应体:包含实际的响应内容,如 HTML 文档、图像或其他数据。

2.4 常见的 HTTP 方法

  • GET:请求指定的资源。一般用于请求数据。
  • POST:向指定的资源提交数据进行处理。
  • PUT:向指定资源位置上传最新内容。
  • DELETE:请求删除指定的资源。
  • HEAD:类似于 GET,但只返回响应头,不返回响应体。

3. 网页的组成

一个典型的网页由以下几个部分组成:
在这里插入图片描述

3.1 HTML

HTML(HyperText Markup Language):是用于创建和结构化网页内容的标准标记语言。HTML 使用标签来标记不同类型的内容,如文本、图像、链接等。

3.1.1 HTML 基础结构
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Hello, World!</h1>
    <p>Welcome to my website.</p>
</body>
</html>

3.2 CSS

CSS(Cascading Style Sheets):是一种样式表语言,用于描述 HTML 文档的外观和格式。CSS 可以控制网页的布局、颜色、字体等。

3.2.1 CSS 示例
body {
    font-family: Arial, sans-serif;
}

h1 {
    color: blue;
}

p {
    font-size: 16px;
}

3.3 JavaScript

JavaScript :是一种高效的编程语言,通常用于网页开发,可以使网页具有动态交互功能。JavaScript 可以操作 HTML 和 CSS,响应用户事件,创建动态效果等。

3.3.1 JavaScript 示例
document.addEventListener('DOMContentLoaded', function() {
    const button = document.getElementById('myButton');
    button.addEventListener('click', function() {
        alert('Button clicked!');
    });
});

4. 使用 Python 进行 Web 爬虫

4.1 常用的 Python 库

  • requests:用于发送 HTTP 请求。
  • BeautifulSoup:用于解析 HTML 和 XML 文档。
  • Scrapy:一个功能强大的爬虫框架。
  • Playwright:用于模拟浏览器操作,支持多种浏览器。

4.2 安装所需库

使用 pip 安装下列库:

pip install requests 
pip install beautifulsoup4 
pip install scrapy 
pip install openpyxl 
pip install playwright
python -m playwright install

4.3 编写一个简单的爬虫

下面是一个使用 requests 编写的简单爬虫示例。

4.3.1 示例代码
import requests

# 发送请求
url = 'https://www.zhihu.com/api/v3/feed/topstory/hot-lists/total'
response = requests.get(url)
# 解析JSON数据
data = response.json()

if 'data' in data:
    # 遍历数据
    for item in data['data']:
        if 'target' in item and 'title' in item['target']:
            print(item['target']['title'])
else:
    print("没有获取到数据")

执行结果如下:
在这里插入图片描述

5. 处理复杂的网页

对于一些动态加载内容的网页,仅靠 requests 和 BeautifulSoup 可能无法获取所有数据。这时可以使用 Playwright 模拟浏览器操作。

5.1 使用 Playwright 示例
import asyncio
from bs4 import BeautifulSoup
from playwright.async_api import async_playwright


async def run(playwright: async_playwright) -> None:
    browser = await playwright.chromium.launch(headless=False)
    context = await browser.new_context()
    page = await context.new_page()
    # 访问网页
    await page.goto('https://nba.hupu.com/')

    # 获取页面内容
    content = await page.content()

    # 解析 HTML(同样使用 BeautifulSoup)
    soup = BeautifulSoup(content, 'html.parser')

    # 提取页面标题
    title = soup.title.string
    print('Title:', title)

    # 提取推荐文章的标题及链接
    links = await page.locator('.list-recommend a, .list-container a').all()
    for link in links:
        title = await link.inner_text()
        href = await link.get_attribute('href')
        print(title, href)

    # 关闭浏览器和上下文
    await context.close()
    await browser.close()


# 异步运行函数
async def main():
    async with async_playwright() as playwright:
        await run(playwright)

# 运行主函数
asyncio.run(main())

在这里插入图片描述

6. 编写一个完整的爬虫项目

下面,我们将编写一个完整的爬虫项目,从一个网站中提取数据并保存到本地文件。

6.1 项目要求

  1. 从一个演出票务网站中提取演出信息;
  2. 将演出数据保存到 Excel 文件中。

6.2 项目步骤

  1. 发送请求并获取响应
  2. 解析响应内容
  3. 创建 Excel 工作簿、Sheet
  4. 将遍历数据保存到 Excel 文件
6.2.1 示例代码

下面是一个使用 requests 和 BeautifulSoup 编写的爬虫示例。

import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook
from pathlib import Path


def showStart(city_code):
    # 发送请求获取网页内容
    url = f'https://www.showstart.com/event/list?pageNo=1&pageSize=99999&cityCode={city_code}'
    response = requests.get(url)
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        items = soup.find_all('a', class_='show-item item')

        # 创建Excel工作簿
        wb = Workbook()
        sheet = wb.active
        # 添加标题行
        sheet.append(['标题', '艺人', '价格', '时间', '地址', '链接'])

        for item in items:
            title = item.find('div', class_='title').text.strip()
            artist = item.find('div', class_='artist').text.strip()
            price = item.find('div', class_='price').text.strip()
            time = item.find('div', class_='time').text.strip()
            addr = item.find('div', class_='addr').text.strip()
            href = 'https://www.showstart.com' + item['href']

            # 将数据写入Excel
            sheet.append([title, artist, price, time, addr, href])

        # 保存Excel文件
        root_dir = Path(__file__).resolve().parent
        file_path = root_dir / f'showstart_{city_code}.xlsx'
        wb.save(file_path)
        print(f'数据已保存到 {file_path}')
    else:
        print(f'请求失败,状态码:{response.status_code}')


if __name__ == "__main__":
    city_code = input("请输入城市编码:")
    showStart(city_code)

打开Excel 文件,内容如下:
在这里插入图片描述

7. 特别注意事项

  • 尊重网站的 robots.txt 文件:大多数网站都有一个 robots.txt 文件,规定了爬虫的访问规则。请遵守这些规则,以避免对网站造成负担。
  • 设置适当的延迟:在发送大量请求时,设置适当的延迟(如使用 time.sleep),以避免对目标网站造成压力。
  • 处理反爬虫措施:一些网站有反爬虫措施,如使用验证码或检测大量请求行为。可以使用代理、模拟浏览器行为等方式绕过这些措施。

8. robots.txt 文件是什么?

robots.txt 文件是一个文本文件,通常放置在网站的根目录下。

它用来告诉搜索引擎的爬虫(spider)哪些页面可以抓取,哪些页面不可以抓取。

要找到网站的 robots.txt 文件,在浏览器的地址栏输入以下格式的URL:

http://www.xxx.com/robots.txt

如果访问的是不带www的域名:

http://xxx.com/robots.txt

  • 这里的 xxx.com 替换成想要查找 robots.txt 的网站域名。如果该网站有 robots.txt 文件,将能够直接在浏览器中看到它的内容。如果不存在,可能会看到404错误页面或者其他错误信息。
  • 此外,有些网站可能会使用 robots.txt 文件来提供关于网站地图(sitemap)的信息,这可以帮助搜索引擎更快地发现和索引网站上的新内容。

总结

本文介绍了 Python 爬虫的基本概念、HTTP 基础知识以及网页的基本组成部分、如何使用 Python 编写简单的爬虫,以及如何处理动态加载内容的网页。希望这些内容对小伙伴们学习和编写 Python 爬虫有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Debug下载与安装(Windows11)

前言 在安装配置前我们先下载一下我们需要用的文件 下载debug 百度网盘下载 下载DOSBox DOSBox 两个文件下载好后我们就开始安装和配置了 第一步&#xff1a;安装DOSBox 第二步&#xff1a;安装好后找到安装路径找到Options.bat文件并打开 第三步&#xff1a;在文件最下…

图片变色,背景方向渐变web

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>图片变色</title> <script src"03.JS\3.8JS案例加强\JQuery.js"></script> <style> .image-filter…

nvm 安装和遇到的问题

环境 win 11 安装 下载安装包 访问 https://github.com/coreybutler/nvm-windows/releases 选择需要的版本继续下载安装基本是可以下一步下一步的啦&#x1f92d; 安装 node 我这里需要16.x.x的node&#xff0c;执行以下命令 nvm install 16使用 node nvm use 16问题 …

苹果CMS V10萌芽采集插件Pro v10.7.3

苹果CMS V10萌芽采集插件Pro v10.7.3 插件下载:萌芽采集插件Pro v10.7.3.zip 使用说明: 将addons文件和static文件放到你苹果cms程序的根目录并覆盖&#xff0c; 在登录后台在应用-应用市场启用。http://你的域名/admin.php/admin/mycj/union.html

卷积的意义及其派生(一)

1.卷积的意义 1.1从LTI的角度看 卷积最开始其实是信号处理中用来描述线性移不变系统Linear time-invariant systems的。线性&#xff0c;表明可以叠加&#xff0c;信号可以拆分成脉冲的响应&#xff1b;时不变&#xff0c;指信号不随着时间的迁移改变&#xff0c;意味着能量守…

计算机网络(Wrong Question)

一、计算机网络体系结构 1.1 计算机网络概述 D 注&#xff1a;计算机的三大主要功能是数据通信、资源共享、分布式处理。&#xff08;负载均衡、提高可靠性&#xff09; 注&#xff1a;几段链路就是几段流水。 C 注&#xff1a;记住一个基本计算公式&#xff1a;若n个分组&a…

C语言程序设计(二)

四.找素数 素数&#xff1a;除了1和它本身不再有其他因数的自然数。换句话说&#xff1a;一个大于1的自然数 &#xff0c;如果只能被1和它本身整除&#xff0c;那就是素数&#xff08;质数&#xff09;。 在打印中遇到的问题就是&#xff0c;知道怎么写却总是运行不起来。主要…

苦学Opencv的第十一天:图像的形态学操作

Python OpenCV从入门到精通学习日记&#xff1a;图像的形态学操作 前言 图像形态学是图像处理中的一个重要分支&#xff0c;主要关注图像中物体的形状和结构。通过形态学操作&#xff0c;我们可以对图像进行有效的分析和处理&#xff0c;例如图像的腐蚀与膨胀、开运算与闭运算…

Java 并发编程:一文了解 Java 内存模型(处理器优化、指令重排序与内存屏障的深层解析)

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 022 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

VIN解析汽车详情|阿里云实现调用API接口

介绍&#xff1a; 本次解析通过阿里云云市场的云服务来实现通过17位车架号来自动识别车型的详细信息&#xff0c;首先需要准备选择一家可以提供查询的商品。 https://market.aliyun.com/apimarket/detail/cmapi00065864#skuyuncode5986400001 步骤1: 选择商品 如图点击免费…

【微软蓝屏】微软Windows蓝屏问题汇总与应对解决策略

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

关键词查找【Knuth-Morris-Pratt (KMP) 算法】

一个视频让你彻底学懂KMP算法_哔哩哔哩_bilibili KMP算法的核心是利用匹配失败后的信息&#xff0c;尽量减少模式串与主串的匹配次数以达到快速匹配的目的。 第一步&#xff1a;计算模式串(子串)和next[j]数组 模式串 前2位字母的next[j]固定是0 和 1 后续字母的nex[j]&…

项目实战——外挂开发(30小时精通C++和外挂实战)

项目实战——外挂开发&#xff08;30小时精通C和外挂实战&#xff09; 外挂开发1-监控游戏外挂开发2-秒杀僵尸外挂开发3-阳光地址分析外挂开发4-模拟阳光外挂开发5-无限阳光 外挂开发1-监控游戏 外挂的本质 有两种方式 1&#xff0c;修改内存中的数据 2&#xff0c;更改内存中…

跟李沐学AI:池化层

目录 二维最大池化 填充、步幅和多个通道 平均池化层 池化层总结 二维最大池化 返回滑动窗口中的最大值。 图为池化窗口形状为 22 的最大池化层。着色部分是第一个输出元素&#xff0c;以及用于计算这个输出的输入元素: max(0,1,3,4)4。池化层与卷积层类似&#xff0c;不断…

数据库中的事务

一、理解事务 1、本质 事务由一组DML语句组成&#xff0c;这一组语句要么全部成功&#xff0c;要么全部失败。在逻辑上&#xff0c;事务就是一组sql语句&#xff0c;但在实际中&#xff0c;公共的数据库一定会高并发地接受各种事务的请求&#xff0c;所以一个事务要有4个属性…

centos7 xtrabackup mysql(8)增量备份(1)

centos7 xtrabackup mysql&#xff08;8&#xff09;增量备份&#xff08;1&#xff09; 参考 xtrabackup-8.0的安装、备份以及恢复&#xff08;innoxtrabackup有待测试&#xff09; https://blog.csdn.net/DWJRIVER/article/details/117792271 https://blog.csdn.net/qq_28…

力扣高频SQL 50 题(基础版)第四题

文章目录 力扣高频SQL 50 题&#xff08;基础版&#xff09;第四题584.寻找用户推荐人题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50 题&#xff08;基础版&#xff09;第四题 584.寻找用户推荐人 题目说明 表: Customer -------------------- | Colu…

Weakly Supervised Contrastive Learning 论文阅读

Abstract 无监督视觉表示学习因对比学习的最新成就而受到计算机视觉领域的广泛关注。现有的大多数对比学习框架采用实例区分作为预设任务&#xff0c;将每个实例视为一个不同的类。然而&#xff0c;这种方法不可避免地会导致类别冲突问题&#xff0c;从而损害所学习表示的质量…

智能算法驱动的爬虫平台:解锁网络数据的无限潜力

摘要 在信息爆炸的时代&#xff0c;网络数据如同深海宝藏&#xff0c;等待着有识之士发掘其无尽价值。本文将探索智能算法驱动的爬虫平台如何成为解锁这一宝库的关键&#xff0c;不仅剖析其技术优势&#xff0c;还通过实例展示它如何助力企业与开发者高效、稳定地采集数据&…