我的代码和beautifulsoup错误

时间:2019-02-12 19:24:15

标签: python beautifulsoup

libgs-dev

嗨, 运行代码时出现此错误,我不知道为什么得到这个,PRICE变量不应为NoneType。

import requests
from bs4 import BeautifulSoup
from mysql import connector

first_url = "https://www.freelancer.com/jobs/?keyword=python"

response = requests.get(first_url)

page = BeautifulSoup(response.text, 'html.parser')
items = page.find_all("div", attrs={"class": "JobSearchCard-item-inner"})
for index, item in enumerate(items):
    title = item.find("a", attrs={"class": "JobSearchCard-primary-heading-link"}).text.strip()
    timeLeft = item.find("span", attrs={"class": "JobSearchCard-primary-heading-days"}).text.strip()

    try:
        verified = 'VERIFIED' == item.find("div", attrs={"class":"JobSearchCard-primary-heading-status Tooltip--top"}).text.strip()
    except:
        verified = False

    description = item.find("p", attrs={"class": "JobSearchCard-primary-description"}).text.strip()
    # do tags section
    price = item.find("div", attrs={"class": "JobSearchCard-secondary-price"}).text.strip().split()
    price = ' '.join(price)
    bids = int(item.find("div", attrs={"class": "JobSearchCard-secondary-entry"}).text.strip().split()[0])
    print("title: ", title)
    print("time left: ", timeLeft)
    print("verified: ", verified)
    print("description: ", description)
    print("price: ", price)
    print("bids: ", bids)
    print("\nindex: {} ------------------------------------------------------------------\n".format(index))

如果您注意到该代码,该程序应打印出TITLE,TIEMLEFT,DESCRIPTION,VERIFIED变量,然后打印出错误。 有什么问题吗?

3 个答案:

答案 0 :(得分:2)

由于此信息,您收到此错误

enter image description here

它没有价格或出价。您可以在该帖子中添加一个try-except块并设置出价和价格所需的值。

try:
    price = item.find("div", attrs={"class": "JobSearchCard-secondary-price"}).text.strip().split()
except AttributeError:
    price=''
price = ' '.join(price)
try:
    bids = int(item.find("div", attrs={"class": "JobSearchCard-secondary-entry"}).text.strip().split()[0])
except AttributeError:
    bids='' 

答案 1 :(得分:1)

如果您滚动浏览源网页上的结果列表,则该行没有发布价格(无出价)。因此,在撰写本文时,该错误是合法的,因为该条目不存在您要查找的元素。

要解决您的问题,只需添加一个检查元素是否存在即可。如果是这样,则提取文本

price = item.find("div", attrs={"class": "JobSearchCard-secondary-price"})
if price:
    price = price.text.strip().split()
else:
    price = "No Avg Price"

答案 2 :(得分:0)

nonetype错误是由 “ item.find(” div“,attrs = {” class“:” JobSearchCard-secondary-price“})” 引起的不是可用的数据类型(例如,字符串而不是int)或自定义类型(例如,名称类型),因此您可能希望在运行该行时查看正在接收的数据,并尽可能将其转换为可用的数据类型尝试格式化它。