Возвращение бланков в Интернете - неправильные элементы - PullRequest
4 голосов
/ 06 марта 2020

Я использую код для очистки отзывов клиентов. Все работает в соответствии с тем, что я хотел, чтобы код делал, но я не мог правильно определить класс или атрибут для оценок, поэтому код всегда возвращает пустые результаты для столбца Ratings.

Может ли кто-нибудь помочь мне найти правильный атрибут и исправить строку кода Ratings?

from bs4 import BeautifulSoup
import requests
import pandas as pd
import json
print ('all imported successfuly')

# Initialize an empty dataframe
df = pd.DataFrame()
for x in range(1, 37):
    names = []
    headers = []
    bodies = []
    ratings = []
    published = []
    updated = []
    reported = []

    link = (f'https://www.trustpilot.com/review/fabfitfun.com?page={x}')
    print (link)
    req = requests.get(link)
    content = req.content
    soup = BeautifulSoup(content, "lxml")
    articles = soup.find_all('article', {'class':'review'})
    for article in articles:
        names.append(article.find('div', attrs={'class': 'consumer-information__name'}).text.strip())
        headers.append(article.find('h2', attrs={'class':'review-content__title'}).text.strip())
        try:
            bodies.append(article.find('p', attrs={'class':'review-content__text'}).text.strip())
        except:
            bodies.append('')

        try:
            #ratings.append(article.find('div', attrs={'class':'star-rating star-rating--medium'}).text.strip())
            ratings.append(article.find('div', attrs={'class': 'star-rating star-rating--medium'})['alt'])
        except:
            ratings.append('')
        dateElements = article.find('div', attrs={'class':'review-content-header__dates'}).text.strip()

        jsonData = json.loads(dateElements)
        published.append(jsonData['publishedDate'])
        updated.append(jsonData['updatedDate'])
        reported.append(jsonData['reportedDate'])


    # Create your temporary dataframe of the first iteration, then append that into your "final" dataframe
    temp_df = pd.DataFrame({'User Name': names, 'Header': headers, 'Body': bodies, 'Rating': ratings, 'Published Date': published, 'Updated Date':updated, 'Reported Date':reported})
    df = df.append(temp_df, sort=False).reset_index(drop=True)

print ('pass1')


df.to_csv('FabfitfunReviews007.csv', index=False, encoding='utf-8')
print ('excel done')

1 Ответ

3 голосов
/ 06 марта 2020

Просто измените эту строку в вашем коде:

ratings.append(article.find_all("img", alt=True)[0]["alt"])

df.Rating, затем выведите:

0            1 star: Bad
1     5 stars: Excellent
2     5 stars: Excellent
3     5 stars: Excellent
4     5 stars: Excellent
5     5 stars: Excellent
6     5 stars: Excellent

Кажется, проще найти тег img в статье и получить из него альтернативный текст.

...