【python】六个常见爬虫方法介绍

在Python中,爬虫是获取网页数据的常用工具。以下是六种常见的爬虫方法,涵盖了从简单的静态网页抓取到动态网页处理的多种场景。


1. 使用 requests + BeautifulSoup 抓取静态网页

这是最基础的爬虫方法,适用于静态网页(HTML内容直接嵌入在网页中)。

示例代码:

python

复制

import requests
from bs4 import BeautifulSoup

# 发送HTTP请求
url = 'https://example.com'
response = requests.get(url)

# 解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')

# 提取数据
title = soup.title.text
print(f'网页标题: {title}')

# 提取所有链接
links = soup.find_all('a')
for link in links:
    print(link.get('href'))

适用场景:

  • 静态网页数据抓取。

  • 数据量较小的简单任务。


2. 使用 requests + 正则表达式 提取数据

如果需要从网页中提取特定格式的数据(如邮箱、电话号码等),可以使用正则表达式。

示例代码:

python

复制

import requests
import re

# 发送HTTP请求
url = 'https://example.com'
response = requests.get(url)

# 使用正则表达式提取邮箱
emails = re.findall(r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+', response.text)
print(emails)

适用场景:

  • 提取特定格式的数据(如邮箱、电话号码、日期等)。

  • 数据格式固定的场景。


3. 使用 Selenium 抓取动态网页

对于动态加载的网页(如通过JavaScript渲染的内容),可以使用 Selenium 模拟浏览器行为。

示例代码:

python

复制

from selenium import webdriver
from selenium.webdriver.common.by import By

# 初始化浏览器
driver = webdriver.Chrome()  # 需要安装ChromeDriver

# 打开网页
url = 'https://example.com'
driver.get(url)

# 获取动态加载的内容
element = driver.find_element(By.CSS_SELECTOR, '.dynamic-content')
print(element.text)

# 关闭浏览器
driver.quit()

适用场景:

  • 动态加载的网页(如单页应用)。

  • 需要与网页交互的场景(如点击按钮、输入文本)。


4. 使用 Scrapy 构建爬虫项目

Scrapy 是一个强大的爬虫框架,适合构建复杂的爬虫项目。

示例代码:

  1. 安装 Scrapy:

    bash

    pip install scrapy
  2. 创建 Scrapy 项目:

    bash

    scrapy startproject myproject
  3. 编写爬虫:

    python

    import scrapy
    
    class MySpider(scrapy.Spider):
        name = 'myspider'
        start_urls = ['https://example.com']
    
        def parse(self, response):
            title = response.css('title::text').get()
            yield {'title': title}
  4. 运行爬虫:

    bash

    scrapy crawl myspider -o output.json

适用场景:

  • 大规模数据抓取。

  • 需要分布式爬虫的场景。


5. 使用 PyQuery 解析 HTML

PyQuery 是一个类似于 jQuery 的库,适合熟悉 jQuery 语法的开发者。

示例代码:

python

import requests
from pyquery import PyQuery as pq

# 发送HTTP请求
url = 'https://example.com'
response = requests.get(url)

# 解析HTML
doc = pq(response.text)

# 提取数据
title = doc('title').text()
print(f'网页标题: {title}')

# 提取所有链接
links = doc('a')
for link in links.items():
    print(link.attr('href'))

适用场景:

  • 熟悉 jQuery 语法的开发者。

  • 需要简洁的 HTML 解析方式。


6. 使用 API 抓取数据

许多网站提供 API 接口,直接通过 API 获取数据是最高效的方式。

示例代码:

python

import requests

# API 地址
url = 'https://api.example.com/data'

# 发送请求
params = {'key': 'your_api_key', 'q': 'search_query'}
response = requests.get(url, params=params)

# 解析 JSON 数据
data = response.json()
print(data)

适用场景:

  • 网站提供 API 接口。

  • 需要高效获取结构化数据。


总结

方法适用场景优点缺点
requests + BeautifulSoup静态网页抓取简单易用无法处理动态内容
requests + 正则表达式提取特定格式数据灵活正则表达式编写复杂
Selenium动态网页抓取支持动态内容速度慢,资源消耗大
Scrapy大规模数据抓取功能强大,支持分布式学习曲线较陡
PyQuery熟悉 jQuery 语法的开发者语法简洁功能相对有限
API网站提供 API 接口高效、稳定需要 API 权限

根据具体需求选择合适的爬虫方法,可以大大提高开发效率和数据抓取效果。

### 使用 AutoGPTQ 库量化 Transformer 模型 为了使用 `AutoGPTQ` 对 Transformer 模型进行量化,可以遵循如下方法: 安装所需的依赖包是必要的操作。通过 pip 安装 `auto-gptq` 可以获取最新版本的库。 ```bash pip install auto-gptq ``` 加载预训练模型并应用 GPTQ (General-Purpose Tensor Quantization) 技术来减少模型大小和加速推理过程是一个常见的流程。下面展示了如何利用 `AutoGPTQForCausalLM` 类来进行这一工作[^1]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model_name_or_path = "facebook/opt-350m" quantized_model_dir = "./quantized_model" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) # 加载已经量化的模型或者创建一个新的量化器对象用于量化未压缩过的模型 gptq_model = AutoGPTQForCausalLM.from_pretrained(quantized_model_dir, model=model, tokenizer=tokenizer) ``` 对于那些希望进一步优化其部署环境中的模型性能的人来说,`AutoGPTQ` 提供了多种配置选项来自定义量化参数,比如位宽(bit-width),这有助于平衡精度损失与运行效率之间的关系。 #### 注意事项 当处理特定硬件平台上的部署时,建议查阅官方文档以获得最佳实践指导和支持信息。此外,在实际应用场景之前应该充分测试经过量化的模型以确保满足预期的质量标准。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值