python - BeautifulSoup4 返回错误的 HTML?
问题描述
我正在尝试使用 Beautifulsoup 在 Indeed.com 上抓取职位信息。但是,当我抓取 URL 时,返回的 HTML 与我在 Google Chrome 中手动转到 URL,然后查看 HTML 时看到的 HTML 不同。
这会导致我的应用程序获得一些不在我试图抓取的网页上的职位发布。
例如,当我抓取https://se.indeed.com/jobb?q=Internship&l=Stockholm&start=0时,我的程序会找到以下公司名称:
[['Nordic Tech House',
'Beaubi',
'NO COMPANY NAME AVAILABLE',
'National Pen',
'SWEDISH STOCKINGS',
'Above Agency',
'BNP Paribas',
'Flattered',
'Stronger',
'Doberman',
'Tink',
'Google',
'BDO AB',
'Amuseio AB',
'Beaubi']]
但是,当我实际访问该网页时,并没有 Google、Amuseio 等发布的招聘信息,而且实际网页上的一些公司也不见了。
我浏览了 BeautifulSoup 在变量“soup”(见下文)中返回的 HTML 代码,并将其与网页上的实际 HTML 代码进行了比较。在 BeatifulSoup 返回的 HTML 中,肯定有 Google 和 Amuseio。但是,这与我在浏览器中检查页面时看到的 HTML 不同。
当我尝试抓取https://se.indeed.com/jobb?q=Summer+Internship&l=Stockholm时,一切正常。本站没有任何分页。
这是我的代码:
from bs4 import BeautifulSoup
import requests
source = requests.get('https://se.indeed.com/jobb?q=Internship&l=Stockholm&start=0')
#THE URL WHICH PRODUCES THE STRANGE HTML
soup = BeautifulSoup(source.text, 'lxml')
articles = soup.find_all('div', class_='jobsearch-SerpJobCard')
#All job postings seem to be in a div with the class mentioned above.
def withdraw_company_names():
lst_of_company_names = []
for posting in articles:
try:
Company = posting.find('span', class_='company').text.strip()
except:
Company = "NO COMPANY NAME AVAILABLE"
print("Name: ", Company)
lst_of_company_names.append(Company)
return lst_of_company_names
基本上我想知道的是:
有谁知道为什么在第一种情况下会返回错误的 HTML 代码?
亲切的问候,丹尼尔
解决方案
如果我理解正确,您希望获取所有包含详细信息的职位发布,然后由公司过滤。您在正确的轨道上,现在您需要发出其他请求,在这种情况下,为每个帖子获取data-jk元素,例如:data-jk="3a919d6b1b5070ca" 并向https://se.indeed发出请求.com/visajobb?jk=3a919d6b1b5070ca
您将从该帖子中获取所有信息现在,根据需要保存数据
推荐阅读
- c++ - 在 C++ 中初始化构造函数的顺序
- python - min(must_visit, key=lambda x:...) 后面的语法
- visual-studio-code - 如何在 VScode 中设置“Ctrl + PlusSign”快捷键
- c++ - 什么是用于获取组合 NIC 的 Windows C++ API 函数?
- android - 如何将值从 onItemClick RecycleView 发送到其他 java 类
- javascript - 如何不将 jQuery 与 Google Tag Manager 一起使用?
- ios - iOS13:当我尝试以横向模式打开 UIViewController 时,应用程序冻结
- vba - 如何填写 SharePoint 网页上的文本字段?
- r - if_else 在 dplyr::mutate 中没有按预期工作
- performance - 如果不是根据需要更改大量文件权限