Объект Python 'NoneType' не имеет атрибута 'разложить' - PullRequest
0 голосов
/ 25 мая 2018
from bs4 import BeautifulSoup
import time
#import requests
import urllib.request,re
#import pandas as pd
#import numpy as np
import csv

def crawlcontents():
    url = 'https://www.tripadvisor.com/ShowTopic-g983296-i13236-k11538516-Rent_from_LOTTE_standard_or_mystery_option-Jeju_Island.html' 

    html = urllib.request.urlopen(url).read().decode() 

#    print(html)

    soup = BeautifulSoup(html,'html.parser')
#    print(soup)
    div = soup.select_one('#SHOW_TOPIC > div.balance > div.firstPostBox > div > div > div.postRightContent > div.postcontent > div.postBody')
    div.select_one('script').decompose() 

    postcontent = div.text.strip()
    postcontent = re.sub(r'\n+', ' ',postcontent)
    print(postcontent)

crawlcontents()

Ползет на сайте поездки.Мне нужен скрипт, но ошибка такова:

python У объекта NoneType нет атрибута «декомпозировать»

как мне это изменить?

1 Ответ

0 голосов
/ 26 мая 2018

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

Если вам нужен именно такой вывод, "div" - это набор результатов.Я не думаю, что вы можете запустить select_one на нем снова.Вам даже не нужно повторно в этом случае.Попробуйте это:

#Remove the below
div.select_one('script').decompose()

#Include the below
postcontent = div[0].text.strip().replace('\n',' ')

Вы должны использовать элемент div [0] вместо div набора результатов.strip () удаляет пробелы на концах, а замена удаляет пробелы между двумя строками комментариев.

...