Python爬虫无法筛选定位USAJOBS职位名称并统计出现频率求助
实现职位名称频次统计的修改后代码
import requests from bs4 import BeautifulSoup from collections import Counter # 增加请求头避免被站点反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } r = requests.get("https://www.usajobs.gov/Search/Results?j=0602&d=VA&p=1", headers=headers) soup = BeautifulSoup(r.content, "html.parser") # 直接通过职位标题a标签的专属属性定位元素,提取标题文本 job_title_list = [ a_tag.get_text(strip=True).lower() for a_tag in soup.find_all("a", class_="usajobs-search-result--core__title") ] # 统计职位名称出现频次 job_count = Counter(job_title_list) print(job_count)
修改说明
- 新增请求头配置:usajobs.gov对默认的requests请求UA会做拦截,添加模拟浏览器的UA可以保证拿到正确的页面内容
- 优化元素定位逻辑:不再遍历所有div提取文本,直接使用目标a标签的专属class
usajobs-search-result--core__title定位所有职位标题元素,精准度更高,也避免统计到无关内容 - 调整统计逻辑:直接提取完整的职位名称做频次统计,符合收集职位名称出现频次的需求,而非统计所有拆分后的单词频次
如果需要更稳定的定位,也可以用a标签的itemprop属性筛选,将find_all的参数改为soup.find_all("a", attrs={"itemprop": "title"}) 效果一致。
内容的提问来源于stack exchange,提问作者Khoras
相关产品推荐
相关产品推荐

