You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从Archive.org的代数英文文本搜索结果中批量提取条目URL

如何从Archive.org的代数英文文本搜索结果中批量提取条目URL

嘿,我来帮你搞定这个批量提取URL的事儿!你已经发现了Archive.org搜索结果URL里的page参数规律,这已经迈出了关键一步。接下来咱们分两种实用方法来实现批量抓取,不管你是想快速提取单页内容,还是处理47k条目的大量结果都能覆盖:

方法一:浏览器控制台快速提取单页URL(适合小批量或测试)

如果你只是想提取某几页的URL,用浏览器自带的开发者工具就能搞定,不用写复杂代码:

  • 打开目标搜索结果页面(比如你提到的page=5页面),按F12打开开发者工具,切换到Console标签页
  • 粘贴下面这段代码,回车执行:
// 提取当前页面所有代数文本条目的完整URL
const itemLinks = Array.from(document.querySelectorAll('.item-ttl a'));
const fullUrls = itemLinks.map(link => 'https://archive.org' + link.href);
// 把URL复制到剪贴板,直接粘贴到文本文件即可
copy(fullUrls.join('\n'));
  • 执行后,当前页面所有条目的URL就已经复制到你的剪贴板了,直接粘贴到记事本或表格里就行。

方法二:Python脚本批量爬取多页URL(适合47k条目的大规模提取)

如果要处理所有搜索结果,用Python脚本自动翻页爬取效率最高,步骤如下:

  1. 先安装必要的库(如果还没装),打开命令提示符执行:
pip install requests beautifulsoup4
  1. 创建一个Python脚本文件(比如archive_algebra_scraper.py),粘贴下面的代码:
import requests
from bs4 import BeautifulSoup
import time

# 基础搜索URL,page参数留空后续动态替换
base_search_url = "https://archive.org/search?query=%28algebra%29+AND+mediatype%3A%28texts%29&page={}&and%5B%5D=language%3A%22English%22"
# 保存结果的文件名
output_filename = "algebra_english_text_urls.txt"

def get_total_result_pages():
    """获取搜索结果的总页数"""
    try:
        response = requests.get(base_search_url.format(1))
        response.raise_for_status()
        soup = BeautifulSoup(response.text, "html.parser")
        total_page_element = soup.find("span", class_="pagination-total")
        if total_page_element:
            # 从"共 X 页"的文本中提取总页数
            total_pages = int(total_page_element.text.strip().split()[-1])
            return total_pages
        else:
            print("无法识别总页数,默认爬取前200页")
            return 200
    except Exception as e:
        print(f"获取总页数失败:{str(e)}")
        return 100

# 获取总页数
total_pages = get_total_result_pages()
print(f"即将爬取 {total_pages} 页的代数英文文本条目URL")

# 开始遍历每一页提取URL
with open(output_filename, "w", encoding="utf-8") as output_file:
    for page_num in range(1, total_pages + 1):
        print(f"正在处理第 {page_num}/{total_pages} 页...")
        try:
            # 发送请求,添加1秒延迟避免给服务器造成压力
            time.sleep(1)
            response = requests.get(base_search_url.format(page_num))
            response.raise_for_status()
            soup = BeautifulSoup(response.text, "html.parser")
            # 找到所有条目标题的链接
            item_links = soup.select(".item-ttl a")
            for link in item_links:
                # 拼接完整URL并写入文件
                full_url = "https://archive.org" + link["href"]
                output_file.write(f"{full_url}\n")
        except Exception as e:
            print(f"第 {page_num} 页处理失败:{str(e)}")
            continue

print(f"所有URL已成功保存到 {output_filename} 文件中!")
  1. 运行脚本,它会自动遍历所有搜索结果页面,把所有条目的URL保存到algebra_english_text_urls.txt文件里。

注意事项

  • Archive.org有反爬机制,脚本里已经加了time.sleep(1)的延迟,不要删除或缩短这个时间,避免被限制访问
  • 如果脚本识别总页数不准确,你可以手动修改total_pages的值(比如你看到搜索结果显示有1200页,就把total_pages = get_total_result_pages()改成total_pages = 1200
  • 如果你不想写代码,也可以试试浏览器扩展工具(比如Linkclump、Scraper),这些工具能可视化地批量提取链接并自动翻页,操作更简单

备注:内容来源于stack exchange,提问作者tahol

火山引擎 最新活动