python BeautifulSoup属性错误:“NoneType”对象在Web抓取尝试中没有属性“text”

8dtrkrch  于 2023-03-21  发布在  Python
关注(0)|答案(2)|浏览(210)

对所有招聘信息进行https://www.work.ua/en/jobs/?ss=1抓取时,我得到**AttributeError:“NoneType”对象没有属性“text”**错误。

import requests
from bs4 import BeautifulSoup
url = 'https://www.work.ua/en/jobs/?ss=1'

# Get the webpage
page = requests.get(url)

# Create a BeautifulSoup object
soup = BeautifulSoup(page.text, 'html.parser')

# Pull all text from the class
jobs = soup.find_all(class_='card card-hover card-visited wordwrap job-link js-hot-block')

# Pull text from all instances of <a> tag within the class
for job in jobs:
    job_title = job.find(class_='add-top-xs').text
    job_city = job.find(class_='add-top-xs').next_sibling.text
    job_salary = job.find(class_='salary').text
    job_url = job.find('a')['href']
    
    print('Job title: {}\nCity: {}\nSalary: {}\nURL: {}\n'.format(job_title, job_city, job_salary))

网络搜索表明,这可能是由于HTML页面中缺少或不正确的标记,但这超出了我的技能水平。

hi3rlvi2

hi3rlvi21#

请理解,在一个表达方式,如

job_title = job.find(class_='add-top-xs').text

初始部分可以返回None
而且None没有.text属性。
定义辅助对象:

def get_text(e):
    if e is None:
        return ""
    return e.text

现在,您可以将其改写为:

job_title = get_text(job.find(class_='add-top-xs'))

更一般地说,你想更好地理解这些页面是如何结构化的,也许add-top-xs类总是出现在感兴趣的元素上,或者它是可选的,你的代码必须学会适应。
打印出soup.prettify()可以帮助您理解格式不佳的输入HTML。

wi3ka0sx

wi3ka0sx2#

说明:

您收到AttributeError异常。您可能在对象中查找“text”属性,但此属性不存在。
错误位于以下部分之一:

soup = BeautifulSoup(page.text, 'html.parser')

job_title = job.find(class_='add-top-xs').text
job_city = job.find(class_='add-top-xs').next_sibling.text
job_salary = job.find(class_='salary').text

你看到了吗?你正在从一个类中请求一个.text值...可能你在HTML页面中看到的这些属性之一没有text属性。
你的问题就在这里

job_salary = job.find(class_='salary').text

页面没有薪资等级

解决方案:

使用try except -类似于:

try:
    soup = BeautifulSoup(page.text, 'html.parser')
    job_title = job.find(class_='add-top-xs').text
    job_city = job.find(class_='add-top-xs').next_sibling.text
    job_salary = job.find(class_='salary').text
except AttributeError:
    print("do_something_with_it")

相关问题