Intelligently import LinkedIn job postings into the job search system.
Core Features
1. LinkedIn URL parsing
2. JD text extraction
3. Company information recognition
4. Automatic jd-analyzer invocation
5. Batch import support
Usage
Import a single JD from a LinkedIn URL
User: "帮我导入这个LinkedIn职位:https://www.linkedin.com/jobs/view/123456789/"
LinkedIn Importer: ✅ Starting LinkedIn job import...
Step 1/4: Reading LinkedIn page...
- URL: https://www.linkedin.com/jobs/view/123456789/
- Status: Success
- Extracted: 2,456 characters
Step 2/4: Identifying company and position...
- Company: Google ✅
- Position: Software Engineer III, Cloud Platform ✅
- Level: L4 (inferred) ✅
- Location: Mountain View, CA / Remote ✅
Step 3/4: Extracting JD details...
- Job description: Extracted ✅
- Skill requirements: 7 required + 4 preferred ✅
- Salary information: Not disclosed ⚠️
- Application status: Applied
Step 4/4: Analyzing and saving...
- Invoked: jd-analyzer skill
- Skill match: 75/100 ✅
- Saved to: data/companies/google.json ✅
✅ Import complete!
📊 Import Summary: Company: Google Position: Software Engineer III, Cloud Platform (L4) Location: Mountain View, CA / Remote Match: 75/100 Source: LinkedIn
💡 Next Steps:
- /company/view google - View full information
- /resume/optimize google sse-l4 - Create a tailored resume
- /interview/prep google - Prepare for interview
### 从文本粘贴导入
```markdown
User: "我复制了LinkedIn上的JD,能帮我导入吗?"
LinkedIn Importer:
当然可以!请粘贴JD文本,我会帮你解析和导入。
[用户粘贴JD文本]
✅ JD文本已接收!
正在分析...
- 识别公司: Meta (Facebook)
- 识别职位: Production Engineer II
- 提取技能: 9项
调用jd-analyzer进行深度分析...
✅ 分析完成!
📊 分析结果:
公司: Meta
职位: Production Engineer II (E4)
匹配度: 68/100
必需技能: 7项
优先技能: 4项
💡 建议:
- 缺少技能: Kubernetes (需补充)
- 优势技能: Distributed Systems (匹配)
- 面试重点: 系统设计 + 生产环境问题
已保存到: data/companies/meta.json
下一步:
- /resume/optimize meta pe-e4
- /weakness/plan --focus kubernetes
Batch import LinkedIn jobs
User: "我有5个LinkedIn职位链接,能批量导入吗?"
LinkedIn Importer:
可以!请提供所有LinkedIn职位URL,我会逐个导入。
[用户提供5个URL]
✅ 开始批量导入...
Progress: [████████░░] 80% (4/5)
✅ 1. Google - Software Engineer L4
- 状态: 导入成功
- 匹配度: 75/100
- 保存: data/companies/google.json
✅ 2. Amazon - Senior SDE L5
- 状态: 导入成功
- 匹配度: 82/100
- 保存: data/companies/amazon.json
✅ 3. Meta - Production Engineer E4
- 状态: 导入成功
- 匹配度: 68/100
- 保存: data/companies/meta.json
✅ 4. Stripe - Software Engineer
- 状态: 导入成功
- 匹配度: 70/100
- 保存: data/companies/stripe.json
⚠️ 5. Netflix - Senior Backend Engineer
- 状态: 部分成功
- 问题: 公司识别失败
- 解决: 手动确认为 "Netflix"
- 匹配度: 72/100
- 保存: data/companies/netflix.json
✅ 批量导入完成!
📊 导入摘要:
总计: 5 个职位
成功: 5 个 (100%)
失败: 0 个
按匹配度排序:
1. Amazon L5 - 82% ⭐⭐⭐
2. Google L4 - 75% ⭐⭐⭐
3. Netflix - 72% ⭐⭐
4. Stripe - 70% ⭐⭐
5. Meta E4 - 68% ⭐⭐
💡 批量操作建议:
- 优先准备Amazon(最高匹配)
- 本周申请: Amazon, Google
- 下周申请: Stripe, Meta
- 研究Netflix后再决定
是否需要我:
1. 生成本周申请计划?
2. 为每个公司优化简历?
3. 创建面试准备时间表?
LinkedIn URL format handling
Supported URL formats
## 🔗 LinkedIn URL Formats
### 标准职位查看URL
https://www.linkedin.com/jobs/view/[job-id]/ https://www.linkedin.com/jobs/view/123456789/
### 职位详情URL
https://www.linkedin.com/jobs/search/?currentJobId=[job-id] https://www.linkedin.com/jobs/collections/recommended/123456789/
### 公司页面职位
https://www.linkedin.com/jobs/search/?f_C=[company-id]%2C[company-id]
### 移动端URL
https://www.linkedin.com/jobs/view/123456789/fromMobile https://www.linkedin.com/jobs/view/123456789/refId=xxx
### 处理逻辑:
1. 提取job-id(URL中的数字ID)
2. 构造标准API URL
3. 读取职位详情页面
4. 解析职位信息
5. 提取JD内容
JD content extraction
LinkedIn page structure
## 📄 LinkedIn JD Extraction
### 页面结构
```html
<div class="description__text">
<h2>About the job</h2>
<p>[职位描述内容]</p>
<h3>Qualifications</h3>
<ul>
<li>[技能要求1]</li>
<li>[技能要求2]</li>
</ul>
<h3>Additional Information</h3>
<p>[额外信息]</p>
</div>
Extracted fields
- Job title:
<h1 class="top-card-layout__title"> - Company name:
<a class="topcard__org-name-link"> - Location:
<span class="job-criteria__text"> - Job type:
<span class="job-criteria__text"> - Work experience:
<span class="job-criteria__text"> - Job description:
<div class="description__text"> - Posting date:
<span class="posted-time"> - Number of applicants:
<span class="applicant-count"> - Salary information:
<span class="salary-cmp">(if provided)
Cleaning steps
- Remove HTML tags
- Clean up excess whitespace
- Remove LinkedIn-specific UI text
- Format as structured JSON
- Preserve key paragraph separations
## 公司信息识别
### 智能公司识别
```markdown
## 🏢 Company Detection
### 方法 1: 从URL提取
LinkedIn company URL: https://www.linkedin.com/company/google/
Extracted: "google"
### 方法 2: 从JD文本识别
```python
patterns = [
r"at (Apple|Google|Microsoft|Amazon|Meta)",
r"(Google|Amazon|Microsoft|Meta|Apple)'s",
r"Join (Apple|Google|Microsoft|Amazon|Meta)",
# ... 更多模式
]
Method 3: Job title inference
"Google Cloud Platform Engineer" → Google
"Amazon Web Services SDE" → Amazon
"Meta Production Engineer" → Meta
Company name normalization
常见变体 → 标准名称:
- "Google Inc." → "Google"
- "Google (Alphabet)" → "Google"
- "Amazon.com" → "Amazon"
- "Amazon Web Services" → "Amazon"
- "Meta (Facebook)" → "Meta"
- "Facebook" → "Meta"
- "M$" → "Microsoft"
- "Stripe, Inc." → "Stripe"
Company ID mapping
{
"google": {
"company_id": "google",
"linkedin_id": "1441",
"name": "Google",
"careers_url": "careers.google.com"
},
"amazon": {
"company_id": "amazon",
"linkedin_id": "1061",
"name": "Amazon",
"careers_url": "jobs.amazon.com"
},
"meta": {
"company_id": "meta",
"linkedin_id": "1035",
"name": "Meta",
"careers_url": "careers.meta.com"
}
}
Level inference
Job level inference
## 📊 Level Inference
### Google级别映射
Software Engineer II → L3 Software Engineer III → L4 Senior Software Engineer → L5 Staff Software Engineer → L6 Senior Staff SE → L7 Principal Engineer → L8
### Amazon级别映射
Software Dev Engineer I → SDE I (L4) Software Dev Engineer II → SDE II (L5) Senior SDE → Senior SDE (L6) Principal SDE → Principal (L7) Senior Principal → Sr Principal (L8)
### Meta级别映射
Software Engineer (E3) → Junior Software Engineer (E4) → Mid-level Senior Software Engineer (E5) → Senior Staff Software Engineer (E6) → Staff Senior Staff SE (E7) → Senior Staff
### 通用级别推断
Keywords → Level:
- "Junior", "Associate", "Entry level" → Junior
- "Software Engineer", "Developer" → Mid-level
- "Senior", "Lead" → Senior
- "Staff", "Principal" → Staff/Principal
- "Director", "VP" → Executive
### 年限要求映射
"1-2 years experience" → Junior "2-4 years experience" → Mid-level "5+ years experience" → Senior "8+ years experience" → Staff/Principal
## 批量导入功能
### 从CSV文件导入
```markdown
User: "我有一个CSV文件包含LinkedIn URL"
LinkedIn Importer:
可以!请提供CSV文件路径或内容。
CSV格式要求:
```csv
company,position,url,status,applied_date
Google,Software Engineer,https://linkedin.com/jobs/123,applied,2024-01-15
Amazon,SDE II,https://linkedin.com/jobs/456,applying,2024-01-16
Or use a file:
/linkedin-import --batch jobs.csv
Processing flow:
- Read the CSV file
- Import LinkedIn jobs one by one
- Automatically identify companies
- Update application status
- Generate a batch import report
### 从文本列表导入
```markdown
User: "我复制了多个LinkedIn URL"
LinkedIn Importer:
请粘贴所有URL,每行一个:
https://www.linkedin.com/jobs/view/123456789/ https://www.linkedin.com/jobs/view/987654321/ https://www.linkedin.com/jobs/view/456789123/
✅ 收到3个URL,开始导入...
[导入过程...]
✅ 导入完成!
Integration with jd-analyzer
Automatic analysis flow
## 🔗 Integration with jd-analyzer
LinkedIn Importer工作流:
1. **提取LinkedIn JD**
- 读取LinkedIn页面
- 提取职位描述文本
- 识别公司和职位信息
2. **调用jd-analyzer**
- 自动传递JD文本
- 返回结构化分析
- 技能匹配评分
3. **保存到数据文件**
- 创建/更新 company.json
- 保存完整分析结果
- 记录导入来源
### 数据流向
LinkedIn URL ↓ linkedin-importer (extract text) ↓ jd-analyzer (analyze skills) ↓ data/companies/{company}.json (save) ↓ user (view results)
## 错误处理
### 常见问题和解决方案
```markdown
## ⚠️ Error Handling
### 错误 1: URL无法访问
Reason: LinkedIn restricts access or the URL is invalid Solution:
- Check whether the URL is correct
- Try logging in to LinkedIn manually and then accessing it
- Copy the JD text and use paste import
- Use the same position from Indeed or another source
### 错误 2: 公司识别失败
Reason: The company information on the LinkedIn page is unclear Solution:
- Use --company to specify the company manually
- Infer from the job title
- Confirm the company name interactively
### 错误 3: JD提取不完整
Reason: LinkedIn loads dynamically or uses a special format Solution:
- Paste the full JD text
- Increase the timeout parameter
- Manually copy and paste the key parts
### 错误 4: 批量导入部分失败
Reason: Some URLs are invalid or access is restricted Solution:
- Continue processing the other URLs
- Mark the failed URLs
- Generate a failure report
- Retry the failed items one by one
Advanced features
Smart deduplication
## 🔍 Duplicate Detection
### 检测重复
同一职位的判断标准:
1. 相同公司 + 相同职位名称
2. 相同LinkedIn Job ID
3. 相似度 > 90% (JD文本相似度)
### 处理重复
Duplicate detected:
- Existing JD: Google SE III (imported on 2024-01-10)
- New JD: Google SE III (2024-01-15)
Choose:
- Skip (keep the existing one)
- Update (replace with the new one)
- Create a version (keep both versions)
LinkedIn-specific field extraction
## 📊 LinkedIn-Specific Fields
### 申请人数
Applicants: 145 Your percentile: Top 30%
用途: 评估竞争激烈程度
### 发布时间
Posted 2 days ago
用途: 判断职位新鲜度
### 容易申请标志
"Easy Apply" ✅
用途: 一键申请
### 查看人数
85 people viewed this job in the past month
用途: 评估职位热度
Data output
Saved data structure
{
"company_id": "google",
"job_applications": {
"sse-l4-linkedin": {
"source": "LinkedIn",
"source_url": "https://www.linkedin.com/jobs/view/123456789/",
"job_id": "123456789",
"title": "Software Engineer III, Cloud Platform",
"inferred_level": "L4",
"location": "Mountain View, CA / Remote",
"description_source": "LinkedIn",
"imported_at": "2024-01-15T14:30:00Z",
"last_updated": "2024-01-15T14:30:00Z",
"application_status": "applied",
"applied_date": "2024-01-15",
"linkedin_specific": {
"easy_apply": true,
"applicants": 145,
"applicant_percentile": "Top 30%",
"posted_date": "2024-01-13",
"views_past_month": 85
}
}
}
}
Performance optimization
Batch import optimization
## ⚡ Performance Optimization
### 并发处理
- 单线程: 10个URL = ~60秒
- 并发(3): 10个URL = ~25秒
- 并发(5): 10个URL = ~18秒
推荐: 并发3-5(避免被LinkedIn限制)
### 缓存策略
Imported JDs → cached for 24 hours Same URL → skip or update
### 增量更新
Update only the changed parts:
- If the JD has not changed → skip
- If there are new applications → update the status
- If the position is closed → mark the status
Best practices
Usage recommendations
## 💡 Best Practices
### 1. 批量导入策略
- 一次导入5-10个职位(太多会混乱)
- 按优先级排序(匹配度高的优先)
- 分批处理(不同类型的职位分开)
### 2. 数据质量
- 总是检查识别的公司名称是否正确
- 确认职位级别推断是否准确
- 验证技能提取是否完整
### 3. 后续操作
- 导入后立即查看分析结果
- 根据匹配度优先排序
- 为高匹配度职位优化简历
- 制定申请时间表
### 4. 定期更新
- 每周重新导入(检查状态变化)
- 更新申请进度
- 标记已关闭的职位
Related commands and skills
/jd-import- General JD import (supports more platforms)jd-analyzerskill - JD analysisresume-optimizerskill - Resume optimization/company/view- View company information/analytics/market- Market intelligence
Pro Tip: LinkedIn job postings change quickly; it is recommended to recheck application status weekly and update progress promptly. Good luck with your applications! 🚀