【Python】爬虫中常见的N种方法最全面的详细介绍

方案均来自互联网开源分析,爬虫请遵守网站的robots.txt协议,请勿非法爬虫!

目录

一、基础请求库方式

1. Requests

2. Requests + lxml

3. Requests + BeautifulSoup

4. Reuqests + re(正则表达式库)

二、动态网页处理方式

1. Selenium

三、高效爬虫框架

1. Scrpy

四、其他实用技术

1、PyQuery(jQuery风格解析)

2、API直接调用(结构化数据)

3、异步库(aiohttp + asyncio)

一、基础请求库方式

场景:静态网页、结构简单的动态渲染页面。

1. Requests

原理:Requests发送HTTP请求获取网页源码。

import requests

url = 'https://www.baidu.com'

response = requests.get(url)

print(response.status_code)

2. Requests + lxml

原理:Requests发送HTTP请求获取网页源码,lxml支持HTML和XML的解析,支持XPath解析方式,解析效率非常高。

import requests

from lxml import etree

url = 'https://www.baidu.com'

response = requests.get(url)

html = etree.HTML(response.text)

complete_html = etree.tostring(html, encoding="unicode", method="html")

print(complete_html)

3. Requests + BeautifulSoup

原理:Requests发送HTTP请求获取网页源码,BeautifulSoup解析HTML结构提取数据。

import requests

from bs4 import BeautifulSoup

# 发送请求

url = 'https://www.baidu.com'

response = requests.get(url)

# 解析HTML内容

soup = BeautifulSoup(response.text, 'html.parser')

# 提取所有a标签的链接

links = soup.find_all('a')

for link in links:

print(link.get('href'))

4. Reuqests + re(正则表达式库)

原理:Requests发送HTTP请求获取网页源码,灵活匹配特定格式数据(如邮箱、电话)

import re

import requests

url = "https://xxxxx.com"

html = requests.get(url).text

emails = re.findall(r'[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}', html, re.I)

print(emails)

二、动态网页处理方式

1. Selenium

原理:模拟浏览器操作(点击、输入),获取JS渲染后的完整DOM。

场景:Ajax加载、登录验证、复杂交互页面。

from selenium import webdriver

from selenium.webdriver.common.by import By

# 初始化浏览器对象

driver = webdriver.Chrome()

# 请求url地址

url = 'https://example.com'

driver.get(url)

# 获取动态加载的内容

data_list = driver.find_elements(By.CLASS_NAME, '.el-list')

for data in data_List:

print(data)

# 关闭浏览器

driver.quit()

三、高效爬虫框架

1. Scrpy

原理:异步处理+中间件扩展,内置调度器、管道存储。

场景:大规模数据抓取、分布式爬虫。

# 安装与创建项目

pip install scrapy

scrapy startproject myproject

# 项目结构

scrapy.cfg:scrapy 项目配置文件,其内定义了项目的配置文件路径、部署相关信息等内容 。

items.py:它定义 Item 数据结构,所有的 Item 的定义都可以放这里 。

pipelines.py:它定义 Item Pipeline 的实现,所有的 Item Pipeline 的实现都可以放这里。

settings.py:它定义项目的全局配置。

middlewares.py:它定义 Spider Middlewares 和 Downloader Middlewares 的实现。

spiders:其内包含一个个 Spider 的实现,每个 Spider 都有一个文件。

# 创建spider

scrapy genspider myspider www.xxx.com

# 运行spider

scrapy crawl myspider

# 输出spider

scrapy crawl myspider -o myspider.csv

# 支持多种输出格式

crapy crawl myspider -o myspider.json

scrapy crawl myspider -o myspider.xml

scrapy crawl myspider -o myspider.pickle

scrapy crawl myspider -o myspider.marshal

scrapy crawl myspider -o ftp://user:pass@ftp.example.com/path/to/myspider.csv

import scrapy

class MySpider(scrapy.Spider):

name = 'example'

start_urls = ['https://example.com']

def parse(self, response):

yield {

'title': response.css('h1::text').get(),

'url': response.url

}

四、其他实用技术

1、PyQuery(jQuery风格解析)

特点:语法简洁,适合前端开发者。

from pyquery import PyQuery as pq

import requests

doc = pq(requests.get("https://example.com").text)

items = doc('.item').items()

for item in items:

print(item.find('a').attr('href'))

2、API直接调用(结构化数据)

特点:高效获取JSON/XML数据,需API权限。

import requests

url = "https://api.douban.com/v2/movie/top250"

params = {"start": 0, "count": 20}

response = requests.get(url, params=params).json()

for movie in response['subjects']:

print(movie['title'], movie['rating']['average'])

3、异步库(aiohttp + asyncio)

原理:协程并发请求,避免阻塞I/O。

场景:高并发爬取API或独立页面。

import aiohttp

import asyncio

async def fetch(url):

async with aiohttp.ClientSession() as session:

async with session.get(url) as response:

return await response.text()

urls = ["https://api.example.com/data1", "https://api.example.com/data2"]

tasks = [fetch(url) for url in urls]

pages = await asyncio.gather(*tasks)

❤如果文章对您有帮助,您的点赞就是我最大的动力❤

《黑暗之魂3》黑魂3哈維爾在哪裏打? 第一次摆摊全攻略:从零开始,打造成功街头创业之旅
top