python网络爬虫


一、Python爬虫核心库

  1. HTTP请求库

    • requests:简单易用的HTTP请求库,处理GET/POST请求。
    • aiohttp:异步HTTP客户端,适合高并发场景。
  2. HTML/XML解析库

    • BeautifulSoup :基于DOM树的解析库,支持多种解析器(如lxml)。
    • lxml:高性能解析库,支持XPath语法。
  3. 动态页面处理

    • Selenium:模拟浏览器操作,处理JavaScript渲染的页面。
    • Playwright(推荐):新一代自动化工具,支持多浏览器。
  4. 数据存储

    • pandas:数据清洗与导出(CSV/Excel)。
    • SQLAlchemy:数据库ORM工具(如MySQL、PostgreSQL)。
  5. 框架

    • Scrapy:高性能爬虫框架,支持分布式、中间件、管道等特性。

二、爬虫开发步骤

1. 发起HTTP请求
python 复制代码
import requests

url = "https://example.com"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

response = requests.get(url, headers=headers)
if response.status_code == 200:
    html = response.text  # 或 response.content
2. 解析HTML内容

使用BeautifulSoup:

python 复制代码
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "lxml")
titles = soup.find_all("h1", class_="title")
for title in titles:
    print(title.text.strip())

使用XPath(配合lxml):

python 复制代码
from lxml import etree

tree = etree.HTML(html)
items = tree.xpath('//div[@class="item"]/a/@href')
3. 处理动态页面(Selenium示例)
python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com")
dynamic_content = driver.find_element(By.CSS_SELECTOR, ".dynamic-element").text
driver.quit()
4. 存储数据

保存到CSV:

python 复制代码
import csv

with open("data.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(["标题", "链接"])
    writer.writerow(["Example", "https://example.com"])

保存到数据库(SQLAlchemy):

python 复制代码
from sqlalchemy import create_engine, Column, String
from sqlalchemy.orm import declarative_base

Base = declarative_base()
class Article(Base):
    __tablename__ = "articles"
    title = Column(String(200), primary_key=True)
    url = Column(String(200))

engine = create_engine("sqlite:///data.db")
Base.metadata.create_all(engine)

# 插入数据
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
session.add(Article(title="Example", url="https://example.com"))
session.commit()

三、实战示例:爬取豆瓣电影Top250

python 复制代码
import requests
from bs4 import BeautifulSoup
import csv

url = "https://movie.douban.com/top250"
headers = {"User-Agent": "Mozilla/5.0"}

def get_movies():
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, "lxml")
    movies = []
    for item in soup.find_all("div", class_="item"):
        title = item.find("span", class_="title").text
        rating = item.find("span", class_="rating_num").text
        movies.append((title, rating))
    return movies

def save_to_csv(movies):
    with open("douban_top250.csv", "w", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        writer.writerow(["电影名称", "评分"])
        writer.writerows(movies)

if __name__ == "__main__":
    movies = get_movies()
    save_to_csv(movies)

四、反爬虫策略与应对

  1. 常见反爬手段

    • User-Agent检测 :伪装浏览器头(如使用fake_useragent库)。
    • IP封禁 :使用代理IP池(如requests + proxies参数)。
    • 验证码:接入打码平台(如超级鹰)或OCR识别。
    • 频率限制 :设置随机请求间隔(如time.sleep(random.uniform(1,3)))。
  2. 推荐工具

    • 代理IP:快代理、芝麻代理。
    • 分布式爬虫:Scrapy + Redis(去重与任务队列)。

五、法律与道德规范

  1. 遵守robots.txt :检查目标网站的爬虫协议。
    • 访问 https://example.com/robots.txt。
  2. 控制请求频率:避免对服务器造成压力。
  3. 数据用途:禁止商用或侵犯隐私。

六、进阶学习方向

  1. Scrapy框架:学习中间件、Item Pipeline、分布式爬虫。
  2. 动态渲染:掌握Selenium/Playwright自动化。
  3. 数据清洗 :使用pandas处理复杂数据。
  4. 反爬破解:逆向JavaScript加密参数(如AST解析)。

相关推荐
129Lab3 分钟前
电池热管理仿真的AI加速:用Python+PINN物理信息神经网络替代传统CFD的可行性探索
pytorch·python·cfd·pinn·物理信息神经网络·仿真加速·电池热管理
anew___13 分钟前
《从零手写操作系统 (30):环境变量与进程上下文——export/unset与继承语义》
java·开发语言·网络·jvm·算法
用户2986985301415 分钟前
Python 中 HTML 转 PDF 的实现方法
python·html·api
Cx330❀16 分钟前
Qt 多线程深度解析:从底层原理到 UI 线程与同步实战
开发语言·qt·ui·搜索引擎·性能优化·图形渲染
答案是你26 分钟前
YOLOE 开放词汇检测 + ONNX / TensorRT 推理,开源了!
python·深度学习·yolo·目标检测·计算机视觉·视觉检测
2601_9628857231 分钟前
AlphaFeed 支持哪些 K 线周期?period参数怎么传?
前端·数据库·python
谢亮_vipxieliang34 分钟前
Go GMP调度模型——从原理到实战的完整指南
开发语言·网络·golang
老歌老听老掉牙35 分钟前
基于 Python 的顺次文本拼接:以 MCD 数控文件为例
python·数控·mcd
朝朝辞暮i36 分钟前
VLA 系统学习第 7 课:loss.backward() 到底做了什么?——从计算图到反向传播
人工智能·python·深度学习·神经网络·vla
外收内放1 小时前
Python基础语法练习题(53-54)
python·学习