Python网络爬虫基础指南

server/2024/11/26 21:35:00/

Python网络爬虫基础指南

网络爬虫(Web

Crawler)是一种自动化程序,用于遍历互联网上的网页并收集数据。Python因其强大的库支持和简洁的语法,成为开发网络爬虫的首选语言之一。本文将介绍如何使用Python编写一个简单的网络爬虫,涵盖从基本设置到数据提取的整个过程。

1. 环境准备

在开始之前,请确保你的系统上已经安装了Python。推荐使用Python 3.x版本。此外,还需要安装一些第三方库,如 requests 和 `

BeautifulSoup ` 。

bash复制代码pip install requests beautifulsoup4  
2. 基本爬虫结构

一个基本的网络爬虫通常包括以下几个步骤:

  1. 发送HTTP请求 :使用 requests 库向目标网站发送请求。
  2. 解析HTML内容 :使用 BeautifulSoup 解析HTML文档。
  3. 提取数据 :根据需求提取所需数据。
  4. 存储数据 :将提取的数据保存到文件或数据库中。
3. 示例代码

以下是一个简单的Python网络爬虫示例,用于爬取一个网页的标题和所有链接。

python复制代码import requests    from bs4 import BeautifulSoup    # 目标URL    url = 'https://example.com'    # 发送HTTP GET请求    response = requests.get(url)    # 检查请求是否成功    if response.status_code == 200:    # 解析HTML内容    soup = BeautifulSoup(response.content, 'html.parser')    # 提取网页标题    title = soup.title.string if soup.title else 'No Title'    print(f'Title: {title}')    # 提取所有链接    links = []    for link in soup.find_all('a', href=True):    href = link['href']    text = link.get_text()    links.append((href, text))    # 打印所有链接    for href, text in links:    print(f'Link: {href}, Text: {text}')    else:    print(f'Failed to retrieve the webpage. Status code: {response.status_code}')  
4. 处理相对链接和异常

在实际应用中,爬取的链接可能是相对链接,需要将其转换为绝对链接。此外,网络请求可能会遇到各种异常,如超时、连接错误等,需要进行适当的处理。

python复制代码from urllib.parse import urljoin    # 发送HTTP GET请求,并处理异常    try:    response = requests.get(url, timeout=10)    response.raise_for_status()  # 如果响应状态码不是200,则引发HTTPError异常    except requests.RequestException as e:    print(f'Error fetching the webpage: {e}')    else:    # 解析HTML内容    soup = BeautifulSoup(response.content, 'html.parser')    # 提取网页标题    title = soup.title.string if soup.title else 'No Title'    print(f'Title: {title}')    # 提取所有链接,并转换为绝对链接    base_url = response.url    links = []    for link in soup.find_all('a', href=True):    href = urljoin(base_url, link['href'])    text = link.get_text()    links.append((href, text))    # 打印所有链接    for href, text in links:    print(f'Link: {href}, Text: {text}')  
5. 遵守robots.txt协议和网站条款

在编写爬虫时,务必遵守目标网站的 robots.txt 协议和网站的使用条款。 robots.txt 文件通常位于网站的根目录(如 `

https://example.com/robots.txt ` ),定义了哪些路径允许或禁止爬虫访问。

6. 使用异步请求提升效率

对于需要爬取大量数据的任务,可以使用 aiohttp 等异步HTTP库来提升效率。异步请求允许在等待网络响应的同时执行其他任务,从而显著减少总耗时。

bash复制代码pip install aiohttp  

异步爬虫示例(简化版):

python复制代码import aiohttp    import asyncio    from bs4 import BeautifulSoup    from urllib.parse import urljoin    async def fetch(session, url):    async with session.get(url) as response:    return await response.text()    async def parse(content, base_url):    soup = BeautifulSoup(content, 'html.parser')    title = soup.title.string if soup.title else 'No Title'    links = [(urljoin(base_url, link['href']), link.get_text()) for link in soup.find_all('a', href=True)]    return title, links    async def main(url):    async with aiohttp.ClientSession() as session:    content = await fetch(session, url)    base_url = url  # 对于简单示例,假设base_url就是url本身    title, links = await parse(content, base_url)    print(f'Title: {title}')    for href, text in links:    print(f'Link: {href}, Text: {text}')    # 运行异步任务    loop = asyncio.get_event_loop()    loop.run_until_complete(main('https://example.com'))  
7. 总结

本文介绍了如何使用Python编写一个简单的网络爬虫,从基本结构到异常处理,再到异步请求。实际开发中,可能需要考虑更多因素,如防反爬虫机制、数据清洗与存储、多线程/多进程等。希望这篇文章能帮助你入门Python网络爬虫,并激发你进一步探索的兴趣。


http://www.ppmy.cn/server/137787.html

相关文章

Java的Socket编程

Java的Socket编程是一种基于TCP/IP协议的通信方式,可以用于在客户端和服务器之间建立网络连接,实现数据传输。以下是Socket编程的简单示例,分别展示了服务器端和客户端的实现。 一、服务端代码 服务端使用ServerSocket来监听客户端的连接请…

Ubuntu:docker 安装和使用

本文将介绍在 Ubuntu 上安装和使用 docker 的方法和 bash 命令。 一、安装 sudo apt update sudo apt install docker.io二、启动 sudo systemctl start docker sudo systemctl enable docker三、下载 sudo docker pull registry.cn-hangzhou.aliyuncs.com/......四、运行 …

分布式和微服务系统区别

一、分布式是更广泛的概念,指将计算分布在多个物理节点上的系统。 适用于需要高可用性、高性能、可扩展性的系统。 应用场景:分布式数据库—数据高可用存储、分布式缓存—提升数据访问速度 分布式计算框架—大规模数据计算、分布式文件系统—海量数据的…

Hbuilder html5+沉浸式状态栏

manifest.json源码视图添加 {"statusbar": {"immersed": true }如图: 2、plusready准备,将状态栏字体变黑,不然背景白色、状态栏白色看不到 //2.1 如果你用了mui, mui.plusReady(function(){plus.navigat…

css 禁止用户选中元素

一、使用user-select属性 1. user-select: none; 可以直接应用于特定的元素&#xff0c;阻止用户选中该元素的文本内容。 .disabled-element {user-select: none;} 然后在 HTML 中&#xff0c;将这个类应用到需要禁止选中的元素上 <p class"disabled-element"…

强大的文本编辑器Notepad++8.4.6 最新版

Notepad最新版是一款多功能的代码编辑工具。Notepad官方版支持27种编程语言&#xff0c;涵盖C、C 、Java 、C#,、XML、 HTML,、PHP、python等等&#xff0c;能够帮助程序员提高编辑效率。Notepad软件支持python与sql代码高亮功能&#xff0c;并且免费开源&#xff0c;能够完美地…

.net core中间件Polly

Polly 是一个 .NET 库,用于处理应用程序的弹性和容错,尤其是在与外部服务交互时。 它提供了各种策略(如重试、断路器、超时、降级等),帮助我们处理请求失败的情况,以提高应用程序的可靠性。 一、使用 Polly 的基本步骤: 1、安装 Polly: 通过 NuGet 包管理器安装 Pol…

机器人领域中的scaling law:通过复现斯坦福机器人UMI——探讨数据规模化定律(含UMI的复现关键)

前言 在24年10.26/10.27两天&#xff0c;我司七月在线举办的七月大模型机器人线下营时&#xff0c;我们带着大家一步步复现UMI「关于什么是UMI&#xff0c;详见此文&#xff1a;UMI——斯坦福刷盘机器人&#xff1a;从手持夹持器到动作预测Diffusion Policy(含代码解读)」&…