У меня проблема с очисткой данных с python - PullRequest
0 голосов
/ 19 марта 2020

Я написал код для очистки данных с сайта airbnb.com. На самом деле я хочу очистить все комментарии с такими деталями, как имя списка, общее количество ревизий, количество комментариев, имя комментатора, дата, комментарии, но мой код не выполняет часть try, к которой он идет напрямую кроме части. пожалуйста, объясните мне, как я могу решить эту проблему. благодарю вас! вот мой код:

import requests
from bs4 import BeautifulSoup
#import pandas as pd
import csv

def get_page(url):
    response = requests.get(url)

    if not response.ok:
        print('server responded:', response.status_code)
    else:
        soup = BeautifulSoup(response.text, 'html.parser') # 1. html , 2. parser
    return soup

def get_detail_data(soup):

    try:
        title = soup.find_all('span',class_="_18hrqvin",id=False).text
    except:
        title = 'empty'  
    print(title)
    try:
        reviews = soup.find_all('div',class_="_10za72m2",id=False).text
    except:
        reviews = 'empty revies'  
    print(reviews)
    try:
        total_reviews = soup.find_all('span',class_="_krjbj",id=False).text
    except:
        total_reviews = 'empty total revies'  
    print(total_reviews)
    try:
        total_reviews = soup.find_all('span',class_="_krjbj",id=False).text
    except:
        total_reviews = 'empty total revies'  
    print(total_reviews)
    try:
        commenter_name = soup.find_all('div',class_="_1p3joamp",id=False).text
    except:
        commenter_name = 'empty commenter_name'  
    print(commenter_name)
    try:
        comment_date = soup.find_all('span',class_="_1jlnvra2",id=False).text
    except:
        comment_date = 'empty comment_date'  
    print(comment_date)
    try:
        comment_date = soup.find_all('span',class_="_1jlnvra2",id=False).text
    except:
        comment_date = 'empty comment_date'  
    print(comment_date)
    try:
        comment = soup.find_all('div',class_="_czm8crp",id=False).text
    except:
        comment = 'empty comment'  
    print(comment)


def main():
    url = "https://www.airbnb.com/rooms/34826867?source_impression_id=p3_1584615891_nVK823DKHNHuFWCQ"
    get_detail_data(get_page(url))
if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 19 марта 2020

Как подсказывает @arcticsanto, ваш get_page возвращает None, если найден неправильный ответ, поэтому get_detail_data не удается получить BeautifulSoup, поэтому просто добавьте проверку супа в get_detail_data

def get_page(url):
  response = requests.get(url)
  if not response.ok:
    print('server responded:', response.status_code)
  else:
     soup = BeautifulSoup(response.text, 'html.parser') # 1. html , 2. parser
  return soup

def get_detail_data(soup):
  if not soup:
    return
  ----
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...