Python 网络爬虫快速入门

news/2024/10/30 7:15:21/

网络爬虫是一种自动化的程序,用于从互联网上抓取数据。Python 由于其简洁的语法和丰富的库支持,成为编写网络爬虫的理想选择。本文将带你快速入门 Python 网络爬虫,从安装必要的库到编写一个简单的爬虫,再到处理更复杂的情况。

1. 环境准备

1.1 安装 Python

确保你已经安装了 Python。你可以从 Python 官方网站 下载并安装最新版本的 Python。

1.2 安装必要的库

我们将使用以下几个库来编写网络爬虫

  • requests:用于发送 HTTP 请求。
  • BeautifulSoup:用于解析 HTML。
  • lxml:用于提高解析速度。

使用 pip 安装这些库:

pip install requests beautifulsoup4 lxml

2. 编写第一个爬虫

2.1 发送 HTTP 请求

使用 requests 库发送 HTTP 请求并获取网页内容。

import requestsurl = 'https://www.example.com'
response = requests.get(url)if response.status_code == 200:print(response.text)
else:print(f"Failed to retrieve the page. Status code: {response.status_code}")

2.2 解析 HTML

使用 BeautifulSoup 库解析 HTML 并提取所需的数据。

from bs4 import BeautifulSoupurl = 'https://www.example.com'
response = requests.get(url)if response.status_code == 200:soup = BeautifulSoup(response.text, 'lxml')title = soup.find('title').textprint(f"Title: {title}")# 提取所有的链接links = soup.find_all('a')for link in links:print(link.get('href'))
else:print(f"Failed to retrieve the page. Status code: {response.status_code}")

3. 处理请求和响应

3.1 设置请求头

有些网站会检查请求头,以防止爬虫访问。你可以设置请求头来模拟浏览器行为。

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}response = requests.get(url, headers=headers)

3.2 处理 cookies

某些网站需要 cookies 才能正常访问。你可以使用 requests 库来处理 cookies。

cookies = {'session_id': 'abc123'
}response = requests.get(url, headers=headers, cookies=cookies)

3.3 处理重定向

默认情况下,requests 会自动处理重定向。你可以禁用自动重定向并手动处理。

response = requests.get(url, headers=headers, allow_redirects=False)if response.status_code == 302:redirect_url = response.headers['location']print(f"Redirected to: {redirect_url}")

4. 解析 HTML

4.1 提取文本

使用 BeautifulSoup 提取文本内容。

soup = BeautifulSoup(response.text, 'lxml')
title = soup.find('title').text
print(f"Title: {title}")

4.2 提取属性

提取 HTML 元素的属性值。

links = soup.find_all('a')
for link in links:href = link.get('href')print(href)

4.3 提取多个元素

提取多个相同类型的元素。

paragraphs = soup.find_all('p')
for p in paragraphs:print(p.text)

5. 高级主题

5.1 异步爬虫

使用 aiohttpasyncio 库编写异步爬虫,提高爬取效率。

import aiohttp
import asyncio
from bs4 import BeautifulSoupasync def fetch(session, url):async with session.get(url) as response:return await response.text()async def main():urls = ['https://www.example.com','https://www.example2.com','https://www.example3.com']async with aiohttp.ClientSession() as session:tasks = [fetch(session, url) for url in urls]responses = await asyncio.gather(*tasks)for response in responses:soup = BeautifulSoup(response, 'lxml')title = soup.find('title').textprint(f"Title: {title}")if __name__ == '__main__':asyncio.run(main())

5.2 反爬虫策略

有些网站会采取反爬虫措施,如验证码、IP 封禁等。你可以采取以下措施应对:

  • 使用代理 IP:使用不同的 IP 地址发送请求。
  • 设置合理的请求间隔:避免短时间内发送大量请求。
  • 处理验证码:使用 OCR 技术或第三方服务识别验证码。

5.3 存储数据

将爬取的数据存储到文件或数据库中。

存储到文件
with open('data.txt', 'w') as f:f.write(response.text)
存储到数据库

使用 sqlite3 库将数据存储到 SQLite 数据库中。

import sqlite3conn = sqlite3.connect('data.db')
cursor = conn.cursor()cursor.execute('''CREATE TABLE IF NOT EXISTS pages (url TEXT, content TEXT)''')url = 'https://www.example.com'
content = response.textcursor.execute('INSERT INTO pages (url, content) VALUES (?, ?)', (url, content))
conn.commit()
conn.close()

6. 总结

通过本文,你应该已经对 Python 网络爬虫有了基本的了解,并能够编写一个简单的爬虫。Python 的强大之处在于其丰富的库支持,无论是简单的数据抓取还是复杂的异步爬虫,Python 都能提供强大的支持。

希望这篇文章对你有所帮助,祝你在 Python 网络爬虫的道路上一切顺利!


http://www.ppmy.cn/news/1543034.html

相关文章

【Spring框架】Spring框架的开发方式

目录 Spring框架开发方式前言具体案例导入依赖创建数据库表结构创建实体类编写持久层接口和实现类编写业务层接口和实现类配置文件的编写 IoC注解开发注解开发入门(半注解)IoC常用注解Spring纯注解方式开发 Spring整合JUnit测试 Spring框架开发方式 前言…

了解elasticsearch

目录 elasticsearch的作用 ELK技术栈 elasticsearch和lucene 为什么不是其他搜索技术? 总结 elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如&am…

STM32-Cube定时器TIM

一、内部时钟源 1、创建项目 File → New → STM32 project选择STM32F103C8T6单片机,命名TIM 2、配置单片机 1.打开USART1,方便我们与电脑连接查看数据 开启UART1并开启中断。 2、设置时钟源 开启外部高速晶振 将时钟频率设置为72MHz 设置调试模…

大语言模型数据流程源码解读(基于llama3模型)

文章目录 前言一、数据进入LlamaForCausalLM(LlamaPreTrainedModel)类二、数据进入LlamaModel(LlamaPreTrainedModel)类1、input_ids的embedding编码2、position_ids位置获取3、causal_mask因果mask构建1、causal_mask调用2、因果mask代码解读(_update_causal_mask)4、hidden_s…

经验总结:typescript 和 axios 项目中大量接口该如何管理和组织

引言 本文旨在介绍一种方法,用于在 typescript 和 axios 的项目中,有效的组合和管理大量的 API 接口以及 interface。 假如我们根据 API 文档对所有的接口做了初步分类,大体如下: scm(某业务模块)├── inventory(库存业务)│…

使用 Kafka 和 MinIO 实现人工智能数据工作流

MinIO Enterprise Object Store 是用于创建和执行复杂数据工作流的基础组件。此事件驱动功能的核心是使用 Kafka 的 MinIO 存储桶通知。MinIO Enterprise Object Store 为所有 HTTP 请求(如 PUT、POST、COPY、DELETE、GET、HEAD 和 CompleteMultipartUpload&#xf…

保持HTTP会话状态:缓存策略与实践

在互联网技术领域,保持HTTP会话状态对于提供连贯和个性化的用户体验至关重要。本文将深入探讨HTTP会话状态的缓存策略,并提供实践指南和代码实现,包括如何在代码中添加代理信息以增强安全性和隐私保护。 HTTP会话状态的重要性 HTTP协议本身…

基于随机森林的智能手机用户行为分类及流量预测分析

1.项目背景 随着智能手机的快速发展,消费者对智能手机的使用行为和习惯也日趋多样化。特别是在5G时代的到来和各类应用的丰富发展背景下,智能手机使用模式呈现出新的特点,本项目使用模拟生成的700位用户智能手机使用数据进行深入分析&#x…