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

Python网络爬虫基础

Python网络爬虫是一种自动化工具,用于从互联网上抓取信息。它通过模拟人类浏览网页的行为,自动地访问网站并提取所需的数据。网络爬虫在数据挖掘、搜索引擎优化、市场研究等多个领域都有广泛的应用。以下是Python网络爬虫的一些基本概念:

1. 发送请求 (Request)

使用 requests

requests 是一个非常流行的 HTTP 客户端库,使用简单且功能强大。

import requests

url = 'https://example.com'
response = requests.get(url)
print(response.text)  # 打印网页内容
设置请求头 (Headers)

为了模拟浏览器行为,通常需要设置 User-Agent 和其他请求头。

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)

2. 处理响应 (Response)

状态码 (Status Code)

检查响应的状态码以确保请求成功。

if response.status_code == 200:
    print('请求成功')
else:
    print(f'请求失败,状态码: {response.status_code}')
获取内容 (Content)

可以从响应对象中获取文本内容、二进制内容等。

html_content = response.text  # 获取文本内容
binary_content = response.content  # 获取二进制内容

3. 解析 HTML (Parsing)

使用 BeautifulSoup

BeautifulSoup 是一个强大的 HTML 解析库,可以方便地从 HTML 中提取数据。

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content, 'html.parser')
title = soup.title.string  # 获取标题
print(title)
使用 lxml

lxml 是另一个高效的 XML 和 HTML 解析库,支持 XPath 表达式。

from lxml import etree

html = etree.HTML(html_content)
title = html.xpath('//title/text()')[0]  # 使用 XPath 获取标题
print(title)

4. 数据存储 (Storage)

写入文件

将提取的数据写入文件,例如 CSV 文件。

import csv

data = [
    ['Name', 'Age'],
    ['Alice', 30],
    ['Bob', 25]
]

with open('data.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerows(data)
存储到数据库

将数据存储到关系型数据库(如 MySQL)或 NoSQL 数据库(如 MongoDB)。

import sqlite3

# 连接到 SQLite 数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 创建表
cursor.execute('''CREATE TABLE IF NOT EXISTS users (name TEXT, age INTEGER)''')

# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 30))
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Bob', 25))

# 提交事务
conn.commit()

# 关闭连接
conn.close()

5. 用户代理 (User-Agent)

设置 User-Agent 可以模拟不同浏览器的行为,避免被网站识别为爬虫。

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)

6. 遵守 Robots 协议

检查网站的 robots.txt 文件,确保爬虫行为符合网站的规定。

import requests

url = 'https://example.com/robots.txt'
response = requests.get(url)
print(response.text)

7. 异常处理 (Error Handling)

处理网络请求中的各种异常,确保爬虫的稳定性。

try:
    response = requests.get(url, timeout=10)
    response.raise_for_status()  # 如果响应状态码不是 200,抛出异常
except requests.exceptions.RequestException as e:
    print(f'请求失败: {e}')

8. 反爬策略

设置请求间隔

避免频繁请求导致被封禁。

import time

for i in range(10):
    response = requests.get(url, headers=headers)
    # 处理响应
    time.sleep(1)  # 每次请求间隔 1 秒
使用代理 IP

使用代理 IP 可以绕过 IP 封禁。

proxies = {
    'http': 'http://123.45.67.89:8080',
    'https': 'https://123.45.67.89:8080'
}
response = requests.get(url, headers=headers, proxies=proxies)

9. 法律与道德

尊重版权

不要侵犯他人的版权,合法使用数据。

保护隐私

不要收集和使用个人敏感信息,遵守相关法律法规。

合法用途

确保爬虫的用途是合法的,不用于非法活动。

总结

以上是 Python 网络爬虫的一些基本概念和技术细节。通过这些知识,你可以构建一个功能完善的网络爬虫。当然,实际应用中可能会遇到更多复杂的情况,需要不断学习和实践来提升技能。


http://www.kler.cn/a/409985.html

相关文章:

  • Move 合约部署踩坑笔记:如何解决 Sui 客户端发布错误Committing lock file
  • 【初阶数据结构和算法】leetcode刷题之设计循环队列
  • React(六)——Redux
  • 非常简单实用的前后端分离项目-仓库管理系统(Springboot+Vue)part 2
  • Django实现智能问答助手-数据库方式读取问题和答案
  • 网络安全基础——网络安全法
  • mac 安装node提示 nvm install v14.21.3 failed可能存在问题
  • 华为ENSP--IP编址及静态路由配置
  • Python3 WebUI自动化总篇:Python3+Selenium+Pytest+Allure+ Jenkins webUI自动化框架
  • AddIPAddress添加临时IP后,socket bind失败
  • 记录两次Unity编辑器和真机表现不符的情况,引用丢失等
  • 英语知识在线平台:Spring Boot框架实践
  • k8s篇之flannel网络模型详解
  • 地球科技的方向走错了吗
  • 使用phpStudy小皮面板模拟后端服务器,搭建H5网站运行生产环境
  • leetcode 212. 单词搜索 II
  • Gitee markdown 使用方法(持续更新)
  • Leetcode647. 回文子串(HOT100)
  • vue项目实现动效交互---lottie动画库
  • Flink中普通API的使用
  • 前端速通(CSS)
  • 力扣 189. 轮转数组
  • C++之《剑指offer》学习记录(12):二叉树的下一个节点
  • node.js路由
  • 香港大带宽服务器:助力高效网络应用
  • 15分钟做完一个小程序,腾讯这个工具有点东西