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

如何遍历URL列表抓取对应页面内容存入数组,需用Selenium还是BS4

工具选择判断
  • 若你要抓取的文本是页面静态渲染内容(直接打开URL右键查看页面源码就能找到对应文本):不需要用Selenium,requests + BeautifulSoup4(BS4)完全可以满足需求,如果目标页面直接返回纯文本,甚至不需要BS4解析。
  • 若你要抓取的文本是JavaScript动态渲染生成的(页面源码里找不到,需要等页面加载完成才会出现):才需要用到Selenium模拟浏览器运行获取内容。
实现方案(静态页面场景,常规需求通用)

你现有代码存在语法错误:print(client_id, client_description_link)会抛出变量未定义异常,这两个字段是存在你构造的holdAllThis字典中,需要从字典取值。
以下是完整的遍历URL、抓取内容、存入列表的实现代码:

import requests
import json
from bs4 import BeautifulSoup
import time

# 读取本地JSON文件
with open('_files/TestFile2.json', 'r') as f:
    file_contents = json.load(f)

result_list = []
# 自定义请求头,避免被网站反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

for x in file_contents['merchandiseData']:
    # 构造基础信息结构
    item = {
        'client_id': x['clientID'],
        'client_description_link': x['url'],
        'page_content': ''  # 预留字段存储抓取到的页面内容
    }
    try:
        # 发起请求,设置10秒超时
        resp = requests.get(item['client_description_link'], headers=headers, timeout=10)
        resp.encoding = resp.apparent_encoding  # 自动识别编码避免乱码
        # 解析页面提取目标文本,可根据实际页面结构修改定位规则
        soup = BeautifulSoup(resp.text, 'lxml')
        # 示例如果目标文本在id为target_text的div标签里,可修改为:soup.find('div', id='target_text').get_text(strip=True)
        item['page_content'] = soup.get_text(strip=True)
        print(f"客户端ID{item['client_id']} 内容抓取完成")
    except Exception as e:
        print(f"客户端ID{item['client_id']} 抓取失败,错误信息:{str(e)}")
        item['page_content'] = '抓取失败'
    result_list.append(item)
    # 增加1秒请求间隔,避免请求频率过高被封IP
    time.sleep(1)

# 单独提取所有页面内容生成独立数组
all_page_content = [i['page_content'] for i in result_list]
# 输出结果
print(result_list)
print(all_page_content)

如果不需要解析HTML结构,目标页面返回的就是纯文本,可以把BS4解析的部分直接替换为item['page_content'] = resp.text即可。

动态页面场景实现(Selenium版本)

需要提前安装Selenium库和对应浏览器的驱动,示例代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import json
import time

# 读取本地JSON文件
with open('_files/TestFile2.json', 'r') as f:
    file_contents = json.load(f)

# 配置浏览器无头模式(不弹出浏览器窗口)
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")
driver = webdriver.Chrome(options=chrome_options)

result_list = []
for x in file_contents['merchandiseData']:
    item = {
        'client_id': x['clientID'],
        'client_description_link': x['url'],
        'page_content': ''
    }
    try:
        driver.get(item['client_description_link'])
        # 等待页面加载,也可以替换为显式等待定位目标元素提升效率
        time.sleep(2)
        # 示例提取页面body文本,可根据需求修改元素定位规则
        item['page_content'] = driver.find_element('tag name', 'body').text.strip()
    except Exception as e:
        print(f"客户端ID{item['client_id']} 抓取失败:{str(e)}")
        item['page_content'] = '抓取失败'
    result_list.append(item)

driver.quit()
print(result_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:54:05