Я получил ошибку в своем коде и BeautifulSoup - PullRequest
0 голосов
/ 12 февраля 2019
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))

Привет, я получил эту ошибку, когда я запустил свой код, я не знаю, почему я получил это, переменная PRICE не должна быть NoneType.

Traceback (most recent call last):
  File "c:\Users\jackson\Desktop\GPFW.py", line 22, in <module>
    price = item.find("div", attrs={"class": "JobSearchCard-secondary-price"}).text.strip().split()
AttributeError: 'NoneType' object has no attribute 'text'

Если вы заметили кодпрограмма должна распечатать переменные TITLE, TIEMLEFT, DESCRIPTION, VERIFIED, а затем распечатать ошибку.В чем проблема?

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Если вы прокрутите список результатов с веб-страницы источника, появится строка, в которой не опубликована цена (или ставка).Таким образом, на момент написания статьи ошибка является допустимой, поскольку искомый элемент не существует для этой записи.

Чтобы решить вашу проблему, просто добавьте проверку, существует ли элемент.Если это так, то извлеките текст

price = item.find("div", attrs={"class": "JobSearchCard-secondary-price"})
if price:
    price = price.text.strip().split()
else:
    price = "No Avg Price"
0 голосов
/ 12 февраля 2019

Вы получаете эту ошибку из-за этого сообщения

enter image description here

У него нет цены или ставки.В этом посте вы можете просто добавить блок «попробуй-исключить» и установить необходимое для ставок и цены значение.

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='' 
0 голосов
/ 12 февраля 2019

ошибка нетипа вызвана тем, что "item.find (" div ", attrs = {" class ":" JobSearchCard-second-price "})" не существуетпригодный для использования тип данных, например, строка вместо int, или пользовательский тип, например, тип имени, поэтому вы можете захотеть взглянуть на данные, которые вы получаете при запуске этой строки, и, если возможно, преобразовать их в пригодный для использования тип данных, прежде чем пытатьсяотформатируйте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...