我的知识记录

Python批量抓取网页标题列表:并发请求与结果汇总

讲解用requests配合BeautifulSoup批量抓取多个网页的标题,线程池并发提速,把结果存成CSV清单,适合竞品监控、文章列表收集、网页索引整理。

场景痛点

手里有一堆URL,可能是从Excel导出来的、从别的页面爬出来的,需要知道每个链接对应的网页标题是什么。手动一个个打开浏览器看标题,几十个链接要点半天。写个脚本把URL丢进去,自动并发请求、自动解析title、存成清单,几分钟搞定。

用到的库

pip install requests beautifulsoup4 lxml

完整代码

# 导入库
import csv
import requests
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor, as_completed

HEADERS = {
"User-Agent": ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36"),
}

def fetch_title(url):
"""抓取单个URL的标题"""
try:
resp = requests.get(url, headers=HEADERS, timeout=10)
resp.encoding = resp.apparent_encoding
soup = BeautifulSoup(resp.text, "lxml")
title = soup.title.get_text(strip=True) if soup.title else ""
return (url, title, resp.status_code)
except Exception as e:
return (url, f"ERROR:{e}", 0)

def main():
# 待抓取的URL列表,实际项目里可以从CSV读
urls = [
"https://example.com",
"https://www.python.org",
"https://httpbin.org",
"https://docs.python.org",
"https://pypi.org",
]

results = []
# 5个线程并发
with ThreadPoolExecutor(max_workers=5) as pool:
futures = {pool.submit(fetch_title, u): u for u in urls}
for fut in as_completed(futures):
url, title, code = fut.result()
results.append((url, title, code))
print(f"[{code}] {title[:50]}  <-  {url}")

# 存成CSV
with open("titles.csv", "w", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f)
writer.writerow(["URL", "标题", "状态码"])
writer.writerows(results)
print(f"已保存 {len(results)} 条到 titles.csv")

if __name__ == "__main__":
main()

代码讲解

  • fetch_title 函数封装单个URL的抓取+解析:请求网页→解析HTML→取 <title> 标签文字。任何一步出错都返回ERROR,不会影响其他URL。
  • ThreadPoolExecutor(max_workers=5) 并发执行,5个URL同时请求,比串行快5倍左右。
  • as_completed 按完成顺序收集结果,谁先回来谁先处理,不用等最慢的那个。
  • 结果统一存成CSV,三列:URL、标题、状态码,方便后续筛选和导入Excel。
  • 每个请求都带统一的User-Agent,避免被反爬识别成脚本。

运行结果

运行后控制台逐行打印每个URL的状态码和标题,最后生成 titles.csv。打开CSV能看到每条URL对应的网页标题,状态码非200的条目一眼就能挑出来。

注意事项

  • URL列表要去重,重复请求既浪费时间又给对方服务器添乱。
  • 并发数根据目标网站承受能力调整,不要一上来就开20个线程。
  • 有些网页title是JS动态写的,requests拿不到,需要找其他方式。
  • 抓取前确认URL来源合法,不要批量抓取别人明确禁止采集的站点。

Python批量抓取网页标题列表:并发请求与结果汇总

标签:

更新时间:2026-09-14 20:51:15

上一篇:Python BeautifulSoup提取表格数据:HTML表格转CSV示例

下一篇:Python批量抓取网页存成本地HTML:离线镜像与归档