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 编写简单的爬虫,以及如何处理动态加载内容的网页。最后,我们用一个完整的爬虫项目,把学到的知识都串联起来,实战演练了一遍。相信通过这次学习,你对爬虫的工作流程和技术细节都有了更深入的理解。


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

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

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

相关文章

数据分析:微生物数据的荟萃分析框架

介绍 Meta-analysis of fecal metagenomes reveals global microbial signatures that are specific for colorectal cancer提供了一种荟萃分析的框架&#xff0c;它主要基于常用的Wilcoxon rank-sum test和Blocked Wilcoxon rank-sum test 方法计算显著性&#xff0c;再使用分…

SpringBoot启动命令过长

Error running DromaraApplication: Command line is too long. Shorten command line for DromaraApplication or also for Spring Boot default configuration?

线上环境服务器CPU飙升排查

前因 收到线上服务器CPU使用率100%的告警信息。 环境 jdk1.8CentOS Linux &#xff1b;CentOS Linux 排查 查看服务器CPU使用率 果然cpu已经达到了100%了 命令 top 使用arthas工具 使用方式 arthas 执行命令java -jar arthas-boot.jar 然后执行命令 thread 看到有两个…

【linux】Shell脚本三剑客之awk命令的详细用法攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

【基础教程】Tutorial on Pytorch 结合官方基础文档和个人经验

参考与前言 此教程首次书写于2021年12月份 至 2022年4月份间不断补充&#xff1b;阅读本文时可以对着代码运行查看 官方网址&#xff1a;https://pytorch.org/tutorials/ 【基本从这里翻译而来 更简洁版碎碎念】https://pytorch.org/tutorials/beginner/blitz/cifar10_tutori…

vue3+element-plus 实现动态菜单和动态路由的渲染

在 Vue.js 中&#xff0c;使用 Vue Router 管理路由数据&#xff0c;并将其用于渲染 el-menu&#xff08;Element UI 的菜单组件&#xff09;通常涉及以下几个步骤&#xff1a; 定义路由元数据&#xff1a; 在你的路由配置中&#xff0c;为每个路由项添加 meta 字段&#xff0c…

无人机10公里WiFi图传摄像模组,飞睿智能超清远距离无线监控,智能安防新潮流

在这个科技日新月异的时代&#xff0c;我们对影像的捕捉和传播有了更高的要求。从传统的有线传输到无线WiFi图传&#xff0c;每一次技术的飞跃都为我们带来了全新的视觉体验。今天&#xff0c;我们要探讨的&#xff0c;正是一款具有划时代意义的科技产品——飞睿智能10公里WiFi…

自学网络安全,从小白到大神的破茧之路!

在当今数字化高速发展的时代&#xff0c;网络安全已经成为了至关重要的领域。无论是个人的隐私保护&#xff0c;还是企业、国家的关键信息资产维护&#xff0c;都离不开网络安全的有力保障。出于对这一领域的浓厚兴趣以及对未来职业发展的清晰规划&#xff0c;我毅然决然地踏上…

0722_驱动1 字符设备驱动框架

一、字符设备驱动框架 字符设备驱动按照字节流进行访问&#xff0c;并且只能顺序访问 设备号一共有32位&#xff0c;主设备号&#xff08;高12位&#xff09;次设备号&#xff08;低20位&#xff09; 二、注册/注销字符设备驱动API接口 2.1、注册字符设备驱动(入口) #include &…

树莓派智能家居中枢

一个先进的枢纽&#xff0c;使智能家居系统更智能、更可定制、更易于控制 Homey Pro由树莓派 Compute Module 4 供电,Homey Pro 为用户提供了一个单一界面,用于控制和监控来自不同品牌的所有智能家居设备。它完全在本地网络上运行,而不是依赖云端,从而实现了最低的延迟、最高的…

docker发布镜像到自己远程私有仓库

1、登录docker hub创建自己的仓库地址&#xff1a;https://hub.docker.com/repository/create 输入仓库名称 2.构建镜像 略过。。。。请自己查找别的资料&#xff0c;此篇文章只讲述镜像推送到远程 3.推送 假设你已经构建了一个镜像 web/online-editor:latest&#xff0c;现…

推荐系统三十六式学习笔记:工程篇.常见架构25|Netflix个性化推荐架构

目录 架构的重要性经典架构1.数据流2.在线层3.离线层4.近线层 简化架构总结 你是否曾经觉得算法就是推荐系统的全部&#xff0c;即便不是全部&#xff0c;至少也是嫡长子&#xff0c;然而实际上&#xff0c;工程实现才是推荐系统的骨架。如果没有好的软件实现&#xff0c;算法不…

树 ----- 基础学习

树 树&#xff1a;n&#xff08;n>0&#xff09;个结点的有限集合。n 0 ,空树。 在任意一个非空树中&#xff0c; 1&#xff0c;有且仅有一个特定的根结点 2&#xff0c;当n>1 时&#xff0c;其余结点可分为m个互不相交的有限集合T1,T2,T3.。。。。Tm&#xff0c;其中每…

如何利用业余时间做副业,在家里赚钱,来增加收入

人一生每个阶段都会有压力和烦恼&#xff0c;中年人更是如此。 上有老下有小&#xff0c;生活的重担都在一个人身上&#xff0c;压得人喘不过气&#xff0c;这些都需要钱&#xff0c;仅靠工资已经很难维持一家人的开支了。 所以很多人打算利用业余时间做副业&#xff0c;来增加…

Pycharm软件Win 64位安装包+详细安装步骤 百度云

如大家所掌握的&#xff0c;Pycharm是一款集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于python语言开发的工具。作为一款功能强大的IDE&#xff0c;Pycharm提供了丰富的功能和工具&#xff0c;使得python开发变得更加高效和便捷。 Pycharm常用场景如下&#x…

Delphi5实现鱼C屏幕保护程序

效果图 鱼C屏幕保护程序 添加背景图片 在additional添加image组件&#xff0c;修改picture属性上传图片。 这个图片可以截屏桌面&#xff0c;方便后面满屏不留白操作。实现无边框 即上面的“- □ ”不显示 将Form1的borderstyle属性改为bsnone实现最大化&#xff0c;满屏 将…

使用API Monitor探测C++程序在调用HtmlHelp接口打开.chm文件时传入了哪些参数

目录 1、API Monitor介绍 2、为何要使用API Monitor工具&#xff1f; 2、HtmlHelp函数在API列表函数中找不到&#xff0c;将所在模块作为外部Extern DLL模块添加到API Monitor中 3、开启对Beyond Compare工具软件的实时监测 4、在Beyond Compare软件中打开chm帮助文档&…

0719_驱动3 printk使用方法

一、printk使用方法 1.应用层打印使用printf&#xff0c;内核层使用printk 2.如何查看内核层中printk如何使用 3.在内核空间执行grep "printk" * -nR 4.在内核空间执行vi -t KERN_INFO 5.printk有8中打印级别&#xff08;0-7&#xff09;&#xff0c;打印级别用来过滤…

学习大数据DAY22 Linux 基 本 指 令 3与 在 Linux 系 统 中 配 置MySQL 和 Oracle

目录 网络配置类 ps 显示系统执行的进程 kill systemctl 服务管理 配置静态 ip 常见错误---虚拟机重启网卡失败或者网卡丢失 mysql 操作 上机练习 6---安装 mysql---参考《mysql 安装》文档 解锁 scott 重启后的步骤 上机练习 7---安装 oracle---参考《oracle 安装》…

Java数据结构与算法--链表(Linked List)

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;Java SE关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 深入了解链表&#xff1a; 链表是一种常见的数据结构&#xff0c;它由一系列节点…