当前位置: 首页 > news >正文

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

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.2 CSS
      • 3.3 JavaScript
    • 4. 使用 Python 进行 Web 爬虫
      • 4.1 常用的 Python 库
      • 4.2 安装所需库
      • 4.3 编写一个简单的爬虫
      • 4.4 示例代码
    • 5. 处理复杂的网页
      • 5.1 使用 Playwright 示例
    • 6. 编写一个完整的爬虫项目
      • 6.1 项目要求
      • 6.2 项目步骤
      • 6.3 示例代码
    • 7. robots.txt 文件是什么?
    • 8. 注意事项
  • 总结

前言

  • 欢迎来到“Python 爬虫入门”系列的第一篇文章。你有没有想过,怎么能从网页上自动抓取你需要的数据?比如,一次性下载所有喜欢的图片,或者获取最新的新闻资讯。其实,这就是网络爬虫能做的事情。
  • Python 是一门非常受欢迎的编程语言,简单易学,而且有很多强大的库可以用来编写网络爬虫。即使你是编程新手,也不用担心,这个系列会从最基础的知识讲起,带你一步步掌握写爬虫的技能。
  • 在这篇文章里,我们会先聊聊什么是网络爬虫,它是怎么工作的,然后教你如何安装和配置开发环境、如何使用 Python 编写爬虫脚本。

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 请求由以下几个部分组成:

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

2.3 HTTP 响应

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

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

2.4 常见的 HTTP 方法

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

3. 网页的组成

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

3.1 HTML

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

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 可以控制网页的布局、颜色、字体等。

CSS 示例如下:

body {font-family: Arial, sans-serif;
}h1 {color: blue;
}p {font-size: 16px;
}

3.3 JavaScript

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

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.4 示例代码

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_playwrightasync 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.stringprint('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.3 示例代码

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

import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook
from pathlib import Pathdef 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']# 将数据写入Excelsheet.append([title, artist, price, time, addr, href])# 保存Excel文件root_dir = Path(__file__).resolve().parentfile_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 文件是一个文本文件,通常放置在网站的根目录下。

它用来告诉搜索引擎的爬虫(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)的信息,这可以帮助搜索引擎更快地发现和索引网站上的新内容。

8. 注意事项

  • 尊重网站的 robots.txt 文件:大多数网站都有一个 robots.txt 文件,告知爬虫哪些页面可以抓取,哪些页面不可以。一定要遵守这些规则,避免抓取被禁止的内容。
  • 避免过度抓取:频繁的请求可能会给目标网站的服务器带来负担,甚至导致服务器宕机。请合理设置抓取的频率,避免对服务器造成过大的压力;
  • 尊重网站的使用条款:有些网站的使用条款中明确禁止未经授权的数据抓取。在抓取数据前,一定要仔细阅读并遵守网站的使用条款和隐私政策。
  • 处理敏感数据:在抓取和处理数据时,要特别注意保护个人隐私和敏感信息。避免抓取和存储敏感数据,确保数据的合法性和安全性。
  • 合法合规:在进行数据抓取时,要确保自己的行为合法合规。不同国家和地区对数据抓取的法律规定不同,务必了解并遵守相关法律法规。
  • 正确识别身份:在请求头中使用合理的 User-Agent,明确表明自己的身份,避免被误认为恶意爬虫。

总结

希望你通过本文,对 Python 爬虫有了一个全面的了解。我们从 Python 爬虫的基本概念、HTTP 基础知识以及网页的基本组成部分讲起,逐步学习了如何使用 Python 编写简单的爬虫,以及如何处理动态加载内容的网页。最后,我们用一个完整的爬虫项目,把学到的知识都串联起来,实战演练了一遍。相信通过这次学习,你对爬虫的工作流程和技术细节都有了更深入的理解。


如果你有任何问题或者好的想法,欢迎随时和我交流。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ES里面常用的查询语句有哪些?
  • Pytorch使用教学2-Tensor的维度
  • 探索Python的进度条神器:tqdm
  • 51单片机嵌入式开发:20、STC89C52R基于C51嵌入式点阵广告屏的设计
  • springcloud rocketmq 新增的消费者组从哪里开始消费
  • 【开发学习笔记】什么是Springboot?
  • 【AI大模型】Prompt 提示词工程使用详解
  • SSM学习9:SpringBoot简介、创建项目、配置文件、多环节配置
  • docker 构建 mongodb
  • 阿里服务器购买与java环境搭建 实践
  • kafka高性能的底层原理分析
  • 若依ruoyi+AI项目二次开发(智能售货机运营管理系统)
  • 0719_驱动1 arm裸机开发与linux驱动开发区别
  • centos7安装redis数据库步骤
  • 数据库编程中游标 连接 commit 字符集
  • 4. 路由到控制器 - Laravel从零开始教程
  • Computed property XXX was assigned to but it has no setter
  • Fundebug计费标准解释:事件数是如何定义的?
  • Java超时控制的实现
  • Java程序员幽默爆笑锦集
  • MySQL几个简单SQL的优化
  • node.js
  • orm2 中文文档 3.1 模型属性
  • text-decoration与color属性
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 追踪解析 FutureTask 源码
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 阿里云服务器如何修改远程端口?
  • ​configparser --- 配置文件解析器​
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #android不同版本废弃api,新api。
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • (16)Reactor的测试——响应式Spring的道法术器
  • (C语言)球球大作战
  • (ibm)Java 语言的 XPath API
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (三)elasticsearch 源码之启动流程分析
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • ***检测工具之RKHunter AIDE
  • .form文件_一篇文章学会文件上传
  • .net core 6 redis操作类
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .Net Core中Quartz的使用方法
  • .Net面试题4
  • @Autowired标签与 @Resource标签 的区别
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [BIZ] - 1.金融交易系统特点