做服务器维护时,经常会遇到需要从外部网站获取数据的情况。比如监控某个电商平台的价格变动,或者定时抓取新闻标题做信息聚合。这时候,写个简单的网络脚本就能自动完成,省得手动刷新页面。
常用的抓取工具
Python 是最常用的脚本语言之一,配合 requests 和 BeautifulSoup 库,几行代码就能拿到网页内容。先用 requests 发起请求,拿到 HTML 源码,再用 BeautifulSoup 解析结构,提取想要的部分。
import requests
from bs4 import BeautifulSoup
url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.find('h1').get_text()
print(title)
这段代码会访问指定网址,提取页面第一个 <h1> 标签的内容并打印出来。适合静态页面,结构清晰、不需要登录的站点。
处理动态加载的内容
现在很多网站用 JavaScript 动态加载数据,直接用 requests 拿到的 HTML 里可能没有实际内容。这时候可以用 Selenium 模拟浏览器操作。
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.get('https://example.com')
element = driver.find_element_by_tag_name('h1')
print(element.text)
driver.quit()
虽然启动浏览器慢一点,但能执行 JS,适合抓取单页应用或需要滚动加载的页面。服务器上运行记得装好驱动和字体支持,避免报错。
注意别给对方服务器添堵
脚本跑起来是挺方便,但别一股脑猛刷请求。短时间内发太多,轻则被封 IP,重则影响目标网站正常服务。加个延时是基本礼貌:
import time
for url in url_list:
response = requests.get(url)
# 处理数据
time.sleep(1) # 每次请求间隔1秒
另外,检查一下目标网站的 /robots.txt 文件,看看哪些路径允许爬取。遵守规则,才能长久稳定地拿数据。
数据提取的小技巧
有些页面结构复杂,标签没规律。可以用 CSS 选择器精准定位。比如想抓取 class 为 price 的所有元素:
prices = soup.select('.price')
for item in prices:
print(item.get_text())
如果数据藏在 JSON 接口里,更简单。直接找到对应的 API 地址,用 requests 请求返回 JSON,解析字段就行,比解析 HTML 还快。
脚本写完别扔那儿不管。服务器环境变了,比如库升级、网络调整,都可能导致脚本失效。定期检查日志,确保它还在正常跑。