如何从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脚本自动翻页爬取效率最高,步骤如下:
- 先安装必要的库(如果还没装),打开命令提示符执行:
pip install requests beautifulsoup4
- 创建一个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} 文件中!")
- 运行脚本,它会自动遍历所有搜索结果页面,把所有条目的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




