关键词定向采集需先验robots.txt与js渲染,再按行业构造编码url,解析时优先查属性而非text,严防反爬导致的ip封禁与跨域cookie失效。

关键词定向采集的核心判断:先确认网站是否“可爬”
直接开爬前必须验证两点:robots.txt 是否禁止抓取目标路径,以及页面内容是否由 JavaScript 渲染生成。很多行业站(如招聘平台、政府招标网、垂直B2B门户)会把关键词列表藏在 AJAX 接口或动态分页里,requests + BeautifulSoup 拿到的 HTML 是空的——这时候硬写 find_all 就是白忙。
构造带关键词的请求 URL 时要注意参数名和编码
不同行业站搜索逻辑差异极大,不能统一套用 wd=xxx 或 q=xxx:
- 招聘类(如前程无忧、BOSS直聘)常用
keyword或kw,且需额外传city和industry参数才返回有效结果 - 招标类(如中国招标投标公共服务平台)URL 中关键词实际是 Base64 编码后的值,直接拼字符串会 400
- 电商类(如京东、1688)搜索页虽有独立 URL,但关键词含空格或符号时,必须用
urllib.parse.quote()而非urlencode全字段编码,否则搜索失效
解析关键词相关数据时,别只盯着 text 属性
行业站常把关键信息藏在属性里,比如:
- 职位页中薪资范围写在
data-salary属性而非文本节点 - 招标公告的预算金额可能在
title属性或data-price自定义属性中 - 某些医疗/法律类站点用
aria-label存放关键词匹配度评分,soup.find('div', {'aria-label': True})才能取到
用 soup.select('div[data-keyword]') 比遍历所有 div 再判断 text 更快也更准。
反爬策略对关键词采集的影响比想象中更直接
关键词采集天然具有高频、低容错特征——搜 10 个词,被封 1 次 IP 就卡住整个流程。真实踩坑点包括:
- 爱站、5118 等 SEO 工具站对
keyword参数做服务端校验,传错格式(如多空格、全角字符)直接返回空 JSON,不报错也不提示 - 知网等学术站要求 Cookie 中必须包含有效的
ASP.NET_SessionId,且每次关键词请求要带相同Referer,否则返回 302 跳登录页 - 部分地方政府采购网会根据请求头中的
Accept-Language判断是否为真实浏览器,缺失或值为en-US会导致返回乱码 HTML
最易被忽略的是:关键词采集往往需要跨多个子域名(如 job.xxx.com、www.xxx.com、api.xxx.com),而 Session 或 Cookie 默认不共享,手动维护 domain 映射比加 delay 更关键。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











