开发者社区 问答 正文

Nonetype是不可调用的

我在我的python脚本中遇到问题,我试图刮擦价格和名称并比较价格和输出是否低于预算或高于预算,我在另一个网站上使用了它,但在这里似乎我遇到了错误。是的,我知道我已经过时了,即时消息仍在实施中。

代码:

import bs4
from bs4 import BeautifulSoup
import requests
from os import system

def job():
    def printing():
        if price1 < priceinput:
            print("price lower")
        else:
            print("price lower")

    price = soup.find(class_="price")
    price2 = int(price.replace(".", ""))
    name = soup.find(itemprop="name").get("content")
    print(price, price2, name)

# link
urlinput = input("LINK : ")
priceinput = int(input("BUDGET :"))
url = ("private" + urlinput)

page = requests.get(url)

soup = BeautifulSoup(page.text, "lxml")

job()

错误:

Traceback (most recent call last):
  File "/home/PycharmProjects/SocialScraper/venv/test.py", line 29, in <module>
    job()
  File "/home/PycharmProjects/SocialScraper/venv/test.py", line 16, in job
    price2 = int(price.replace(".", ""))
TypeError: 'NoneType' object is not callable

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 22:38:20 782 分享 版权
1 条回答
写回答
取消 提交回答
  • 错误

    TypeError: 'NoneType' object is not callable
    

    显然意味着此处引用的html范围没有包含价格类的元素,因此价格值作为NonType返回,尝试在NoneType上调用replace会抛出错误,因为NoneType没有要调用的函数

    NoneType.replace() # NoneType has no function called replace
    

    所以你可能想改变这一行

    price = soup.find(class_="price")
    

    price = soup.find(class_="price") or ""
    

    或者,当汤无法找到价格值时,您可以放置​​任何适合的默认值。

    有关此问题的更高级调试,建议您在代码中使用ipdb以确保其按预期工作https://pypi.org/project/ipdb/ 这是此问题的示例解决方案

        price = soup.find(class_="price").text
        price2 = int(price.replace(' ', '').split('.')[0][1:])
    

    回答来源:stackoverflow

    2020-03-24 22:38:27
    赞同 展开评论
问答分类:
问答地址: