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

如何将XML站点地图转为可索引列表并实现链接抓取?

解决XML站点地图转列表及链接抓取问题

我看了你的代码,问题主要出在两个地方:一是get_urls()函数没有返回URL列表,导致你没法把结果存成可索引的列表;二是解析XML站点地图的方式有点绕,而且用html.parser解析XML可能会出问题。咱们一步步改:

1. 修复get_urls()函数,让它返回URL列表

原来的get_urls()里直接循环调用retuned_objects(url),但没有返回任何内容,所以lst = [get_urls()]其实得到的是[None],自然没法用lst[0]访问有效链接。咱们让函数先收集所有URL,再返回这个列表:

2. 正确解析XML站点地图

XML站点地图要用XML解析器,比如xml.parser或者lxml(需要先安装lxml库),比html.parser更靠谱。而且提取<loc>标签的内容不用那么复杂的字符串分割,直接用.text就能拿到。

修改后的完整代码

from bs4 import BeautifulSoup
import requests

def get_urls():
    baseurl = 'https://link/sitemap.xml'
    request = requests.get(baseurl)
    # 用XML解析器解析,而不是html.parser
    soup = BeautifulSoup(request.content, 'xml')
    search_html = soup.find_all('url')
    # 直接提取loc标签的文本,简单又可靠
    results_list = [item.find('loc').text.strip() for item in search_html]
    # 返回URL列表,而不是直接遍历调用函数
    return results_list

def scrape_url(url):
    # 这里写你的抓取逻辑,比如获取标题
    try:
        response = requests.get(url)
        soup = BeautifulSoup(response.content, 'html.parser')
        # 按你给的示例代码抓取标题
        title = soup.find_all("div", {"class":"large-7 medium-9 columns"})[0].h1.text
        print(f"URL: {url}, 标题: {title}")
    except Exception as e:
        print(f"抓取{url}出错: {str(e)}")

# 获取URL列表
url_list = get_urls()

# 现在你可以正常访问列表元素了
print("第一个链接:", url_list[0])
print("第二个链接:", url_list[1])

# 遍历所有链接进行抓取
for url in url_list:
    scrape_url(url)

关键改动说明

  • 返回列表:get_urls()现在返回收集到的所有URL,这样url_list = get_urls()就能得到一个可索引的列表,你可以用url_list[0]、url_list[1]直接访问单个链接。
  • XML解析器:把解析器从html.parser改成xml,BeautifulSoup会自动用合适的XML解析器处理,避免HTML解析带来的问题。
  • 简化提取逻辑:用item.find('loc').text.strip()直接获取<loc>标签里的URL,比字符串分割更稳定。
  • 拆分功能:把URL收集和内容抓取分成两个独立函数,逻辑更清晰,也方便调试。

这样你就能正常调用列表里的每个元素,对每个链接执行抓取操作啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:05:47