You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python+BeautifulSoup将每个链接单独存入数据库

问题:如何将每个抓取到的链接单独存入数据库?

你当前的代码会把所有抓取到的链接累积起来存入同一行,原因是每次循环都将之前所有链接拼接成一个字符串插入数据库,而不是单独插入每个链接。

错误原因分析

  • 循环内每次将新链接加入links列表,再用'"'.join(links)把所有链接拼成一个整体字符串,导致每次插入的都是截至当前的所有链接集合,而非单个独立链接。
  • 游标mycursor在循环内重复创建,属于不必要的性能损耗。

修正后的代码

from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
import mysql.connector

# 建立数据库连接
mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="",
  database="webscraper"
)
mycursor = mydb.cursor()  # 提前初始化游标,避免循环内重复创建

req = Request("https://google.com")
html_page = urlopen(req)
main_link = "https://google.com"

soup = BeautifulSoup(html_page, "html.parser")

# 遍历每个a标签,单独插入链接
for link in soup.findAll('a'):
    current_link = link.get('href')
    # 跳过空链接,避免存入无效数据
    if current_link:
        sql = "INSERT INTO links (main_link, link_scraped) VALUES (%s, %s)"
        val = (main_link, current_link)
        mycursor.execute(sql, val)

mydb.commit()  # 循环结束后统一提交,提升性能

关键修改点

  1. 直接使用link.get('href')获取当前单个链接,不再拼接所有链接。
  2. 将游标初始化移到循环外,减少资源消耗。
  3. 添加空链接判断,避免存入无效数据。
  4. 将commit()移到循环外,批量提交操作,提升数据库写入性能(如果需要实时提交也可以放回循环内,但批量提交更高效)。

内容的提问来源于stack exchange,提问作者hylkest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:20:51