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

网页抓取如何避免文本转为大型数组?Python维基数据格式求助

Hey there! Let's work through your two technical questions step by step:

问题1:网页抓取时避免抓取到的文本转为巨型数组

通常出现这种情况,是因为抓取时没有按网页的结构针对性提取内容,反而把所有零散的文本节点一股脑塞进了数组里。比如直接用get_text().split()这类操作,会把所有文本按空格分割成数组,自然就变成巨型数组了。

解决思路是按网页的结构解析内容,比如用BeautifulSoup定位到你需要的区块(比如正文段落、标题等),逐个提取文本,而不是一次性把所有文本拆分成数组:

from bs4 import BeautifulSoup
import requests

url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 只提取正文段落的文本,存入字典而不是数组
page_content = {}
page_content["title"] = soup.title.string
page_content["paragraphs"] = [p.get_text(strip=True) for p in soup.find_all("p")]

# 这样你得到的是结构化的字典,而非巨型数组
print(page_content)

这里我们把标题和段落分别整理到字典的不同字段里,既保留了结构,又避免了无意义的巨型数组。

问题2:保存维基页面浏览量为近似Python字典的格式,避免转为数组

从你的描述来看,问题大概率出在数据的序列化/保存环节:脚本里处理数据时不小心把字典转成了数组,或者保存时没有保留字典的结构,导致读取回来变成了数组,但直接复制粘贴(相当于手动保留了字典结构)就正常。

下面是针对维基页面浏览量的完整解决方案,确保数据始终保持字典结构:

第一步:抓取维基浏览量数据(用官方API)

Wikimedia提供了Pageviews API,可以直接返回结构化的JSON(本质就是Python字典),避免手动解析网页的麻烦:

import requests
import json

def fetch_wiki_pageviews(page_title):
    # API请求示例:获取指定页面2023年的月度浏览量
    api_url = f"https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/en.wikipedia.org/all-access/all-agents/{page_title}/monthly/20230101/20231231"
    response = requests.get(api_url)
    if response.status_code == 200:
        return response.json()  # 这里返回的就是字典结构
    return {"error": f"Failed to fetch data for {page_title}"}

第二步:整理多个页面的数据为字典

把多个页面的浏览量数据统一存入一个大字典:

# 要抓取的维基页面标题列表
target_pages = ["Python_(programming_language)", "JavaScript", "Artificial_intelligence"]

# 用字典存储所有页面的浏览量数据
all_pageviews = {}
for page in target_pages:
    all_pageviews[page] = fetch_wiki_pageviews(page)

第三步:保存数据为近似Python字典的格式

有两种靠谱的方式,都能保留字典结构:

方式1:保存为JSON文件(推荐,通用易读)

JSON格式和Python字典几乎一致,而且可以轻松读取回来继续操作:

with open("wiki_pageviews.json", "w", encoding="utf-8") as f:
    json.dump(all_pageviews, f, indent=4, ensure_ascii=False)

方式2:保存为可直接导入的Python字典文件

如果需要直接在代码里使用,可以把字典直接写入.py文件,复制粘贴也完全没问题:

with open("wiki_pageviews_dict.py", "w", encoding="utf-8") as f:
    f.write(f"wiki_pageviews = {repr(all_pageviews)}")

为什么之前的脚本会转成数组?

大概率是你在处理数据时,误取了API返回里的列表字段(比如response.json()['items'],这是一个数组),而没有保留整个字典结构。或者保存时用了str(all_pageviews).split()这类错误操作,把字典转成了数组。只要确保始终操作字典对象,并用正确的方式序列化保存,就不会出现这个问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:41:13