python'NonType'对象没有属性'decompose'

时间:2018-05-25 18:15:00

标签: python html web web-scraping web-crawler

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'NonType'对象没有属性'decompose'

我该怎么改变?

1 个答案:

答案 0 :(得分:0)

我想你想要"神秘选项似乎有一个很好的价格优惠 - 但你不知道你会得到哪辆车你采取哪一个?结果会好吗?"作为输出对吗?您尝试使用分解来删除标记,但这不是必需的。

如果这是您想要的输出," 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()删除末尾的空格,而replace删除两个注释字符串之间的空格。