【Python】爬虫中常见的N种方法最全面的详细介绍
·
方案均来自互联网开源分析,爬虫请遵守网站的robots.txt协议,请勿非法爬虫!
目录
一、基础请求库方式
场景:静态网页、结构简单的动态渲染页面。
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)
❤如果文章对您有帮助,您的点赞就是我最大的动力❤
更多推荐




所有评论(0)