我正在尝试使用以下列表推导来检索BeautifulSoup对象的title属性。
[i.find(class_ = 'turnstileLink')['title'] for i in soup_obj.find_all(class_ = 'jobtitle')]
但是失败了,因为第一个元素没有标题对象。
[i for i in soup_obj.find_all(class_ = 'jobtitle')][0]
<a class="jobtitle" data-tn-element="jobTitle" href="/ita?id=21544&tk=1clc5blpc5ihif01&flowPage=jasxserp&flowType=inline&q=babysitter&l=Austin%2C+TX&adLoc=Austin%2C+TX&fromita=1" rel="noopener" target="_blank">Nanny, Babysitter, Daycare Worker, Childcare Worker</a>
但是其余元素确实包含该属性。
[i for i in soup_obj.find_all(class_ = 'jobtitle')][1]
<h2 class="jobtitle" id="jl_916e5029c0a9d994">
<a class="turnstileLink" data-tn-element="jobTitle" href="/company/LA-Fitness/jobs/Babysitter-Kids-Klub-916e5029c0a9d994?fccid=0b9d9ba80ad80eea&vjs=3" onclick="setRefineByCookie(['radius']); return rclk(this,jobmap[0],true,0);" onmousedown="return rclk(this,jobmap[0],0);" rel="noopener nofollow" target="_blank" title="Babysitter/Kids Klub"><b>Babysitter</b>/Kids Klub</a>
</h2>
因此,当我单独抓取一个不是元素0的元素时,这似乎起作用
仅供参考:这是创建了soup_obj的脚本
import requests
from bs4 import BeautifulSoup
from collections import Counter
import pandas as pd
url = 'https://www.indeed.com/jobs?q=babysitter&l=Austin,+TX&sort=date&limit=10&radius=25'
page = requests.get(url)
soup_obj = BeautifulSoup(page.text, 'html.parser')
很抱歉,如果其中的任何一个都难以消化,我仍然还是BeautifulSoup和python的相对新手。如有需要,可以提供更多详细信息
答案 0 :(得分:0)
要避免在类似KeyErrors
的对象中使用dict
,可以使用get
:
[i.find(class_ = 'turnstileLink').get('title') for i in soup_obj.find_all(class_ = 'jobtitle') if i.find(class_ = 'turnstileLink').get('title')]
尽管那样会使阅读起来有些困难。您可能更喜欢使用:
gen = [i.find(class_ = 'turnstileLink').get('title') for i in soup_obj.find_all(class_ = 'jobtitle')]
links = [g for g in gen if g]
出于可读性考虑