使用 BeautifulSoup 当有工作可用时提醒我

问题描述 投票:0回答:2

我正在尝试为 Northvolt 公司提供特定职位列表时创建提醒 (https://northvolt.com/career)。该职位的名称是“能源协调员”。目前他们没有寻找我的职位,所以我想创建一个脚本,可以在可用时提醒我。

我尝试过使用BeautifulSoup。我们的想法是每天在职业网页上抓取/搜索“能源协调员”一词,并在有空时向我发送电子邮件。

问题是,当我请求时,我认为我的终端没有收到正确的 HTML。我不确定如何描述它或者这是否有意义。不管怎样,下面是一些代码。

    import requests
    from bs4 import BeautifulSoup
    
    result = requests.get("https://northvolt.com/career")
    
    source = result.text
    
    soup = BeautifulSoup(source, "html.parser")
    print(soup.prettify())

当我打印汤并在终端搜索栏中从网页搜索各种关键字时,我没有找到关键字。当我在

requests.get("")
中使用另一个网页时,我找到了终端中显示在网页上的所有内容。我在这里做错了什么,为什么我从 Northvolt 网页发出的请求与其他网页相比如此奇怪?

此图片显示了我在终端中收到的内容。一面文字墙,没有提及任何有关职位列表的内容

This image shows what I receive in my terminal. A wall of text which doesn't say anything about job listnings

python beautifulsoup alert
2个回答
3
投票

在该页面上使用 AJAX 获取作业。如果您在浏览器中打开“网络”选项卡,您应该会看到其中一个请求从 https://feed.jobylon.com/feeds/150d2f7a9df44df8a1ac9c5c794f7220/?format=json获取 JSON 数据。

我假设该 URL 中的 ID 是该公司在 Jobylon 上的 ID。

BeautifulSoup 仅获取静态 HTML 页面。它不会像浏览器那样加载它们并执行 JavaScript。 Selenium 能够做到这一点。

但是,在这种情况下,您可以直接从 Python 代码中的上面的 URL 获取 JSON 数据。

例如:

import requests

url = "https://feed.jobylon.com/feeds/150d2f7a9df44df8a1ac9c5c794f7220/"

querystring = {"format":"json"}

headers = {
    'Accept': "application/json",
    'Accept-Language': "en-US,en;q=0.5",
    'Content-Type': "application/json;charset=UTF-8",
    'Origin': "https://northvolt.com",
    'DNT': "1",
    'Referer': "https://northvolt.com/career",
    'Connection': "keep-alive",
    'TE': "Trailers",
    'cache-control': "no-cache",
    }

response = requests.request("GET", url, headers=headers, params=querystring)

data = response.json()

print(data)

为了轻松生成如上所述的 Python 代码,我通常在 Firefox 的“网络”选项卡中右键单击一个请求,单击“复制为 cURL”,将其导入 Postman(通过单击“导入”,然后单击“粘贴原始文本”)并然后在Postman中点击请求下的“Code”并将其导出为Python代码片段。

我上传了一个简短的演示视频这里


0
投票

不确定我是否有确切的答案,但如果您阅读以下文章 - 它包含在 LinkedIn 上搜索职位帖子的所有详细信息,我觉得它可能很容易转移到您的问题:

https://medium.com/p/8b1cd877ff01

如果您有任何跟进。让我知道。

© www.soinside.com 2019 - 2024. All rights reserved.