繁体   English   中英

Python Beautiful Soup - AttributeError: 'NoneType' object 没有属性 'find_all'

[英]Python Beautiful Soup - AttributeError: 'NoneType' object has no attribute 'find_all'

我相信我详细浏览过类似的帖子,但找不到解决方案; 因此重新发布。 如果问题看起来重复,我们深表歉意。

我正在尝试从 LinkedIn 中抓取工作数据作为练习。 我已经在 autonews.com 上使用了相同的代码,它似乎运行良好。 但是,我不知道这是网站上容器的命名方式,还是代码中的其他内容需要更改。

不管怎样,长话短说,对于初学者,我只需要以下信息:职位、公司名称、位置和 URL。请参见下面的代码:

import requests
from bs4 import BeautifulSoup

url = "https://www.linkedin.com/jobs/search/?geoId=101282230&keywords=it%20business%20analyst&location=Germany"

response = requests.request('GET', url)
content = response.content.decode('utf-8')
soup = BeautifulSoup(content, 'html.parser')

items = soup.find('div', attrs={'class': 'flex-grow-1 artdeco-entity-lockup__content ember-view'})
job_title = items.find_all('div', attrs={'class': 'full-width artdeco-entity-lockup__title ember-view'})
job_company = items.find_all('div', attrs={'class': 'artdeco-entity-lockup__subtitle ember-view'})
job_location = items.find_all('div', attrs={'class': 'artdeco-entity-lockup__caption ember-view'})
job_link = items.find_all('a', attrs={'class': 'full-width artdeco-entity-lockup__title ember-view'})

for i in range(0, len(job_title)):
    print(job_title[i].get_text())   


我收到以下错误:

job_title = items.find_all('div', attrs={'class': 'disabled.ember-view.job-card-container__link.job-card-list__title'})
AttributeError: 'NoneType' object has no attribute 'find_all'

我也尝试过更换容器 - 向上移动多个级别 - 但问题似乎仍然存在。 如果有人能够在这里指导,将不胜感激,谢谢!

在此处输入图像描述

事情是当您使用请求模块从 web 页面获取内容时,它会在第一时间获取它,它会收到响应并且不会等待相关内容。

如果您在 web 浏览器中打开 URL,您将看到 LinkedIn 显示加载屏幕并请求模块将其作为 html 或从 URL 获得的任何其他第一响应。这就是为什么itemsnull

您需要等待 LinkedIn 为您提供您正在寻找的内容,然后开始抓取。

为此,我建议您使用selenium 模块。

Selenium运行自己的浏览器,您可以在其中等待内容加载,然后开始抓取。

这段代码对我来说很好用:

import requests
from bs4 import BeautifulSoup

url = "https://www.linkedin.com/jobs/search/?geoId=101282230&keywords=it%20business%20analyst&location=Germany"

response = requests.request('GET', url)
content = response.content.decode('utf-8')
soup = BeautifulSoup(content, 'html.parser')

items = soup.find('ul', {'class': 'jobs-search__results-list'})
job_titles = [i.text.strip('\n ') for i in items.find_all('h3', {'class': 'base-search-card__title'})]
job_companies = [i.text.strip('\n ') for i in items.find_all('h4', {'class': 'base-search-card__subtitle'})]
job_locations = [i.text.strip('\n ') for i in items.find_all('span', {'class': 'job-search-card__location'})]
job_links = [i["href"].strip('\n ') for i in items.find_all('a', {'class': 'base-card__full-link'})]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM