Python 爬虫入门教程:从零构建你的第一个网络爬虫

网络爬虫是一种自动化程序,用于从网站抓取数据。Python 凭借其丰富的库和简单的语法,是构建网络爬虫的理想语言。本文将带你从零开始学习 Python 爬虫的基本知识,并实现一个简单的爬虫项目。


1. 什么是网络爬虫?

网络爬虫(Web Crawler)是一种通过网络协议(如 HTTP/HTTPS)获取网页内容,并提取其中有用信息的程序。常见的爬虫用途包括:

  • 收集商品价格和评价。
  • 抓取新闻或博客内容。
  • 统计数据分析。

爬虫工作原理

  1. 发送 HTTP 请求到目标网站。
  2. 获取服务器返回的 HTML 页面。
  3. 解析 HTML 内容,提取所需数据。
  4. 保存数据以供后续使用。

2. 爬虫的基本工具

在 Python 中,我们可以使用以下工具和库来构建爬虫:

2.1 requests

requests 是一个强大的 HTTP 库,用于发送网络请求,获取网页内容。

安装:

pip install requests

示例:

import requests 
url = "https://example.com" 
response = requests.get(url) 
print(response.text) # 打印网页内容

2.2 BeautifulSoup

BeautifulSoup 是一个解析 HTML 和 XML 的库,用于从网页中提取数据。

安装:

pip install beautifulsoup4

示例:

from bs4 import BeautifulSouphtml = "<html><body><h1>Hello, World!</h1></body></html>"
soup = BeautifulSoup(html, "html.parser")
print(soup.h1.text)  # 输出 "Hello, World!"

2.3 pandas

pandas 是一个用于数据处理和分析的库,适合将爬取的数据保存到 CSV 或 Excel。

安装:

pip install pandas

示例:

import pandas as pddata = {"Title": ["Example"], "Link": ["https://example.com"]}
df = pd.DataFrame(data)
df.to_csv("output.csv", index=False)

3. 爬虫案例:抓取豆瓣电影排行榜

下面我们将构建一个爬虫,从豆瓣电影的网页抓取电影排行榜。

3.1 准备工作

目标网址: https://movie.douban.com/top250

我们将抓取以下信息:

  • 电影名称
  • 评分
  • 引言

3.2 代码实现

import requests
from bs4 import BeautifulSoup
import pandas as pd# 爬取一个页面的数据
def scrape_page(url):headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"}response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, "html.parser")movies = []for item in soup.find_all("div", class_="item"):title = item.find("span", class_="title").textrating = item.find("span", class_="rating_num").textquote = item.find("span", class_="inq").text if item.find("span", class_="inq") else "N/A"movies.append({"Title": title, "Rating": rating, "Quote": quote})return movies# 主程序:爬取多页
def main():base_url = "https://movie.douban.com/top250?start={}"all_movies = []for i in range(0, 250, 25):  # 每页 25 部电影url = base_url.format(i)print(f"Scraping: {url}")movies = scrape_page(url)all_movies.extend(movies)# 保存为 CSV 文件df = pd.DataFrame(all_movies)df.to_csv("douban_top250.csv", index=False)print("Scraping complete! Data saved to douban_top250.csv")if __name__ == "__main__":main()

3.3 代码解析

  1. 设置请求头: 模拟浏览器访问,避免被反爬机制屏蔽。

  2. BeautifulSoup 提取内容: 使用 findfind_all 定位 HTML 标签,提取标题、评分和引言。

  3. 循环抓取多页: 构造分页 URL,逐页爬取。

  4. 保存为 CSV: 使用 pandas 将数据存储为 CSV 文件。


4. 运行与结果

运行程序后,将生成 douban_top250.csv 文件,内容如下:


5. 注意事项

5.1 遵守爬虫的礼仪

  1. 合理设置延迟: 在抓取页面时加入适当的延时,避免对服务器造成压力。

  2. 检查 robots.txt 访问目标网站的 https://example.com/robots.txt 查看允许抓取的内容。

  3. 请求头伪装: 使用 User-Agent 模拟浏览器访问。

5.2 反爬机制应对

如果遇到反爬机制,可以尝试:

  • 使用代理 IP。
  • 处理动态内容(如 JavaScript 加载的页面)。
  • 使用更高级的库如 seleniumPlaywright

6. 总结与扩展

通过本文,我们学习了使用 Python 构建基本爬虫的流程,并完成了一个抓取豆瓣电影 Top250 的项目。你可以将爬虫技术扩展到更复杂的应用场景,比如:

  • 动态加载数据的网站(如使用 seleniumrequests-html)。
  • 数据清洗与可视化(结合 pandasmatplotlib)。
  • 大规模爬取(结合分布式爬虫框架如 Scrapy)。

在实际应用中,记得遵守法律法规和网站的爬虫协议,合理使用网络爬虫技术!

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

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

相关文章

从0到1部署Tomcat和添加servlet(IDEA2024最新版详细教程)

本文不仅细化了每一个步骤&#xff0c;实现了从0到1部署Tomcat和添加servlet。还针对IDEA2024版和以前的版本在部署上的区别&#xff0c;做了详细介绍&#xff0c;尤其是add framework support部分。与此同时&#xff0c;针对控制台中文乱码问题&#xff0c;本文也给出了详细解…

书生大模型实战营第四期-入门岛-4. maas课程任务

书生大模型实战营第四期-入门岛-4. maas课程任务 任务一、模型下载 任务内容 使用Hugging Face平台、魔搭社区平台&#xff08;可选&#xff09;和魔乐社区平台&#xff08;可选&#xff09;下载文档中提到的模型&#xff08;至少需要下载config.json文件、model.safetensor…

相亲交友小程序项目介绍

一、项目背景 在当今快节奏的社会生活中&#xff0c;人们忙于工作和事业&#xff0c;社交圈子相对狭窄&#xff0c;寻找合适的恋爱对象变得愈发困难。相亲交友作为一种传统而有效的社交方式&#xff0c;在现代社会依然有着巨大的需求。我们的相亲交友项目旨在为广大单身人士提…

初级数据结构——二叉树题库(c++)

这里写目录标题 前言[1.——965. 单值二叉树](https://leetcode.cn/problems/univalued-binary-tree/)[2.——222. 完全二叉树的节点个数](https://leetcode.cn/problems/count-complete-tree-nodes/)[3.——144. 二叉树的前序遍历](https://leetcode.cn/problems/binary-tree-…

【前端】ES6基础

1.开发工具 vscode地址 :https://code.visualstudio.com/download, 下载对应系统的版本windows一般都是64位的 安装可以自选目录&#xff0c;也可以使用默认目录 插件&#xff1a; 输入 Chinese&#xff0c;中文插件 安装&#xff1a; open in browser&#xff0c;直接右键文件…

25A物联网微型断路器 智慧空开1P 2P 3P 4P-安科瑞黄安南

微型断路器&#xff0c;作为现代电气系统中不可或缺的重要组件&#xff0c;在保障电路安全与稳定运行方面发挥着关键作用。从其工作原理来看&#xff0c;微型断路器通过感知电流的异常变化来迅速作出响应。当电路中的电流超过预设的安全阈值时&#xff0c;其内部的电磁感应装置…

数据结构--Map和Set

目录 一.二叉搜索树1.1 概念1.2 二叉搜索树的简单实现 二.Map2.1 概念2.2 Map常用方法2.3 Map使用注意点2.4 TreeMap和HashMap的区别2.5 HashMap底层知识点 三.Set3.1 概念3.2 Set常用方法3.3 Set使用注意点3.4 TreeSet与HashSet的区别 四.哈希表4.1 概念4.2 哈希冲突与避免4.3…

计算机操作系统——进程控制(Linux)

进程控制 进程创建fork&#xff08;&#xff09;函数fork() 的基本功能fork() 的基本语法fork() 的工作原理fork() 的典型使用示例fork() 的常见问题fork() 和 exec() 结合使用总结 进程终止与$进程终止的本质进程终止的情况正常退出&#xff08;Exit&#xff09;由于信号终止非…

【ArcGIS Pro实操第10期】统计某个shp文件中不同区域内的站点数

统计某个shp文件中不同区域内的站点数 方法 1&#xff1a;使用“空间连接 (Spatial Join)”工具方法 2&#xff1a;使用“点计数 (Point Count)”工具方法 3&#xff1a;通过“选择 (Select by Location)”统计方法 4&#xff1a;通过“Python 脚本 (ArcPy)”实现参考 在 ArcGI…

通过端口测试验证网络安全策略

基于网络安全需求&#xff0c;项目中的主机间可能会有不同的网络安全策略&#xff0c;这当然是好的&#xff0c;但很多时候&#xff0c;在解决网络安全问题的时候&#xff0c;同时引入了新的问题&#xff0c;如k8s集群必须在主机间开放udp端口&#xff0c;否则集群不能正常的运…

鸿蒙学习自由流转与分布式运行环境-价值与架构定义(1)

文章目录 价值与架构定义1、价值2、架构定义 随着个人设备数量越来越多&#xff0c;跨多个设备间的交互将成为常态。基于传统 OS 开发跨设备交互的应用程序时&#xff0c;需要解决设备发现、设备认证、设备连接、数据同步等技术难题&#xff0c;不但开发成本高&#xff0c;还存…

web day03 Maven基础 Junit

目录 Maven坐标&#xff1a; 依赖排除&#xff1a; 依赖范围&#xff1a; Maven生命周期&#xff1a; 单元测试&#xff1a; Junit入门&#xff1a; 断言&#xff1a; Junit中的常见注解&#xff1a; 概念&#xff1a;Maven 是一款用于管理和构建 Java项目的工具&#…

docker部署单机版doris

文章目录 前言一、系统环境简介二、部署要求三、部署安装1、基础设置2、下载镜像3、下载安装包4、启动镜像环境5、配置fe6、配置be 总结 前言 应项目测试需求&#xff0c;需使用docker部署单机版doris。 一、系统环境简介 #1 系统信息 [roottest][~] $cat /etc/redhat-relea…

【漏洞复现】CVE-2020-13925

漏洞信息 NVD - CVE-2020-13925 Similar to CVE-2020-1956, Kylin has one more restful API which concatenates the API inputs into OS commands and then executes them on the server; while the reported API misses necessary input validation, which causes the hac…

Linux:文件管理(一)——文件描述符fd

目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说&#xff0c;如果在电脑上新建了一个空白文档&#xff0…

mac上的建议xftp 工具

mac上的建议xftp 工具 最近使用mac比较频繁了&#xff0c;但是第一次重度使用mac里面有很多的工具都是新的&#xff0c;有的window版本的工具无法使用。 xftp 的平替 Cyberduck 从它的官网上下载是免费的&#xff0c;但是如果使用 Apple store 要花费198呢。这不就剩下一大笔…

IC数字后端实现之大厂IC笔试真题(经典时序计算和时序分析题)

今天小编给大家分享下每年IC秋招春招必考题目——静态时序分析时序分析题。 数字IC后端笔试面试题库 | 经典时序Timing计算题 时序分析题1&#xff1a; 给定如下图所示的timing report&#xff0c;请回答一下几个问题。 1&#xff09;这是一条setup还是hold的timing report?…

警钟长鸣,防微杜渐,遨游防爆手机如何护航安全生产?

近年来&#xff0c;携非防爆手机进入危险作业区引发爆炸的新闻屡见报端。2019年山西某化工公司火灾&#xff0c;2018年延安某煤业瓦斯爆炸&#xff0c;均因工人未用防爆手机产生静电打火引发。涉爆行业领域企业量大面广&#xff0c;相当一部分企业作业场所人员密集&#xff0c;…

Redis与MySQL如何保证数据一致性

Redis与MySQL如何保证数据一致性 简单来说 该场景主要发生在读写并发进行时&#xff0c;才会发生数据不一致。 主要流程就是要么先操作缓存&#xff0c;要么先操作Redis&#xff0c;操作也分修改和删除。 一般修改要执行一系列业务代码&#xff0c;所以一般直接删除成本较低…

Linux宝塔部署wordpress网站更换服务器IP后无法访问管理后台和打开网站页面显示错乱

一、背景&#xff1a; wordpress网站搬家&#xff0c;更换服务器IP后&#xff0c;如果没有域名时&#xff0c;使用服务器IP地址无法访问管理后台和打开网站页面显示错乱。 二、解决方法如下&#xff1a; 1.wordpress搬家后&#xff0c;在新服务器上&#xff0c;新建站点时&am…