【发布时间】:2021-12-22 15:08:01
【问题描述】:
我正在使用 bs4 来抓取 Indeed.com 的工作(链接 here)。我已经能够成功提取标题、公司和摘要,没有任何问题。
现在我想更进一步,提取用户点击每个职位时提供的子链接,例如这个link,所以我可以提取其他信息,例如每个角色所需的特定技术。
我注意到子链接 url 包含 jk=e5b27ae62cb7c45f,这是我可以用来创建子链接的 html 中包含的作业密钥。不幸的是,我正在努力提取此作业密钥!
我已经确定作业密钥嵌套在<a> 标记中,标记为data-jk:
这是我目前使用 bs4 的函数:
def transform(soup):
divs = soup.find_all('a', class_= 'tapItem')
for item in divs:
title = item.find('h2', {'class':'jobTitle-color-purple'}).text
id = item.find('a')
print(title)
print(id)
transform(soup)
返回以下结果:
newDevOps Engineer
<a class="turnstileLink companyOverviewLink" data-tn-element="companyName" href="/cmp/Tata-Consultancy-Services-(tcs)" rel="noopener" target="_blank">Tata Consultancy Services (TCS)</a>
newDevOps Engineer - Sydney, Australia
None
DevOps Engineers
<a class="turnstileLink companyOverviewLink" data-tn-element="companyName" href="/cmp/CGI" rel="noopener" target="_blank">CGI</a>
Graduate Software Developer/Programmer (DevOps)
<a class="turnstileLink companyOverviewLink" data-tn-element="companyName" href="/cmp/Tata-Consultancy-Services-(tcs)" rel="noopener" target="_blank">Tata Consultancy Services (TCS)</a>
Cloud Engineer (Entry level, AWS training provided)
如您所见,我能够成功提取title,但不能成功提取id,因为我不知道如何从<a> 标记中选择data-jk 值。我也很困惑为什么当我打电话给item.find('a') 时,带有class: 'tapItem' 的<a> 标签甚至没有出现?
我已经搜索了 stackoverflow,但找不到与我类似的问题。希望这里有人能帮我解决这个问题!
【问题讨论】:
-
title没有直接的href但所有报价都在<a>内,我什至可以在您的图像上看到 - 在黑色背景的顶部。 -
你必须在
'job_seen_beacon上方开始几个标签 - 在id="mosaic-provider-jobcards"- 得到这个<a> -
感谢您的建议!我已经更新了我的问题以提供更多背景信息。我已经意识到我需要在上面开始一些标签,所以我正在使用 class: 'tapItem' 但仍然遇到提取 data-jk 的问题
-
data-jk是类似href或class-id["data-jk"],id["href"],id["class"]的属性 -
顺便说一句:属性是一个字典,所以你也可以像在普通字典中一样使用
id.get("data-jk"), id.get("href")。你甚至可以使用默认值id.get("data-jk", default_value)
标签: python web-scraping beautifulsoup href