python - 使用 BeautifulSoup 在没有类名的范围内提取文本
问题描述
我正在尝试使用 BeautifulSoup 从求职网站中提取数据。我已经能够提取我需要的所有数据,但显示的薪水。
该网页是https://mx.indeed.com/jobs?q=operador&l=Ciudad%20de%20M%C3%A9xico
我遇到的问题是薪水在<span>
没有班级名称或头衔的情况下。
示例 html 代码如下所示:
<div class="heading6 tapItem-gutter metadataContainer"><div class="metadata salary-snippet-container"><div aria-label="$12,000 al mes" class="salary-snippet"><span>$12,000 al mes</span></div></div></div>
我试过了:
salary = card.find("div", {"class" : "salary-snippet"}).find("span").text
但我收到以下错误:
AttributeError: 'NoneType' object has no attribute 'find'
谁能解释我如何解决这个问题?
解决方案
怎么了?
样本看起来很完美,但如果仔细观察,所有卡片中都没有薪水元素。
怎么修?
只需检查元素是否存在,然后在其上调用文本:
salary = card.select_one('div.salary-snippet').text if card.select_one('div.salary-snippet') else None
例子
import requests
from bs4 import BeautifulSoup
headers ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
}
r =requests.get('https://mx.indeed.com/trabajo?q=operador&l=Ciudad%20de%20M%C3%A9xico&vjk=970d586d3023d4d0')
soup=BeautifulSoup(r.content, 'lxml')
data = []
for card in soup.select('#mosaic-provider-jobcards a'):
companyName = card.select_one('span.companyName').text if card.select_one('span.companyName') else None
companyLocation = card.select_one('div.companyLocation').text if card.select_one('div.companyLocation') else None
salary = card.select_one('div.salary-snippet').text if card.select_one('div.salary-snippet') else None
data.append({
'companyName':companyName,
'companyLocation':companyLocation,
'salary':salary
})
data
只是想增加带薪工作吗?
data = []
for card in soup.select('#mosaic-provider-jobcards a'):
companyName = card.select_one('span.companyName').text if card.select_one('span.companyName') else None
companyLocation = card.select_one('div.companyLocation').text if card.select_one('div.companyLocation') else None
salary = card.select_one('div.salary-snippet').text if card.select_one('div.salary-snippet') else None
if salary:
data.append({
'companyName':companyName,
'companyLocation':companyLocation,
'salary':salary
})
data
推荐阅读
- swift - 如何将 UIView 存储在 CoreData 或 UserDefaults 中
- javascript - 在 react.js 项目中运行一个 pixi.js 脚本
- python - 如何正确比较 3 个不同 numpy 数组的元素?
- algorithm - 用来自线性供应流的值填充嵌套结构
- docker - 无法连接到运行 Kestrel 服务器的本地 Docker
- c - c代码使用递归打印数组的反转
- javascript - 无法在弹出窗口中触发脚本
- spring - HikariCP 空闲连接在连接池中保持活动状态
- asp.net - 我的 MS Access 数据库不会更新 asp.net
- python - 无法弄清楚为什么我的 azure python-webapp-graph-api 无法识别我的租户 ID