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

如何从已提取的URL列表中抓取深层数据?附Python代码

深层数据抓取实现方案

你现有的代码已经完成了列表页URL的提取,要抓取每个URL对应的深层数据,只需要在遍历列表项时,对详情页发起请求并解析所需字段即可。以下是具体实现方案:

核心修改思路

  • 新增详情页处理函数,负责请求详情页并提取深层数据
  • 在列表遍历逻辑中调用该函数,将基础信息与深层数据合并
  • 加入请求延迟,避免触发网站反爬机制

修改后的完整代码

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

def extract(page):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0'}
    url = f'https://www.legalentityidentifier.in/leicert/?page_size={page}'
    r = requests.get(url, headers)
    soup = BeautifulSoup(r.content, 'html.parser')
    return soup

# 新增:处理详情页的函数,传入相对链接,返回提取的深层数据
def extract_details(relative_link):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0'}
    # 拼接完整的详情页URL
    full_url = f'https://www.legalentityidentifier.in{relative_link}'
    
    try:
        r = requests.get(full_url, headers)
        r.raise_for_status()  # 捕获HTTP请求错误
        soup = BeautifulSoup(r.content, 'html.parser')
        
        # 根据详情页实际HTML结构提取字段(以下为示例,需自行调整)
        details = {}
        # 提取LEI编码
        lei_code = soup.find('div', class_='lei-number').text.strip() if soup.find('div', class_='lei-number') else '未找到'
        details['LEI编码'] = lei_code
        # 提取注册状态
        status = soup.find('div', class_='status').text.strip() if soup.find('div', class_='status') else '未找到'
        details['注册状态'] = status
        # 可添加更多字段提取逻辑
        
        return details
    except requests.exceptions.RequestException as e:
        print(f"请求详情页失败: {full_url}, 错误信息: {e}")
        return {'LEI编码': '请求失败', '注册状态': '请求失败'}

def transform(soup):
    divs = soup.find_all('div', class_='table-cell legal-name')
    joblist = []

    for item in divs:
        title = item.find('a').text.strip()
        link = item.find('a')['href']
        
        # 获取详情页数据并合并
        deep_data = extract_details(link)
        job_info = {
            '名称': title,
            '详情链接': link,
            **deep_data  # 展开深层数据字典
        }
        joblist.append(job_info)
        
        # 添加请求延迟,避免频率过高被限制
        time.sleep(1)
    
    return joblist

# 主执行逻辑
page_soup = extract(10)
joblist = transform(page_soup)

df = pd.DataFrame(joblist)
print(df.head())
df.to_csv('LEI详情数据.csv', index=False)

关键注意事项

  • 字段提取调整:代码中的详情页选择器(如lei-number、status)是示例,需通过浏览器F12查看目标页面的实际HTML结构,修改对应的选择器
  • 反爬优化:可以将固定延迟改为随机延迟(需导入random模块,使用time.sleep(random.uniform(0.5, 2))),降低被识别的概率
  • 异常处理:代码中加入了基础的请求异常捕获,可根据需求扩展,比如处理页面解析失败的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:42:02