【问题标题】:Python Crawl - count elements and get textsPython Crawl - 计算元素并获取文本
【发布时间】:2021-01-02 16:34:29
【问题描述】:

我正在尝试抓取网站。网址在这里https://www.edmunds.com/kia/telluride/2021/consumer-reviews/?pagesize=50

第一个问题是评分有星星。所以我的问题是我怎样才能得到他们评价的星星?我需要整数形式的结果。

<span class="rating-stars text-primary-darker mr-0_25" aria-label="5 out of 5 stars">
 <span class="rating-star icon-star-full"></span>
 <span class="rating-star icon-star-full"></span>
 <span class="rating-star icon-star-full"></span>
 <span class="rating-star icon-star-full"></span>
 <span class="rating-star icon-star-full"></span>
</span>

第二个问题是如何拆分和获取日期数据和用户名?

我试过了

source.find(class_ = 'small text-gray mb-2') #type: bs4.element.Tag

有输出。

<div class="small text-gray mb-2"><div>Vic<!-- -->, <!-- -->10/17/2020</div><div>EX 4dr SUV (3.8L 6cyl 8A)</div></div>

Vic 是用户名,10/17/2020 是日期数据。

这是我的代码。

chrome_driver = '/Users/chromedriver'
driver = webdriver.Chrome(chrome_driver)

url = 'https://www.edmunds.com/kia/telluride/2021/consumer-reviews/?pagesize=50'

driver.get(url)

src = driver.page_source
source = BeautifulSoup(src, 'html.parser', from_encoding='utf-8')

review_list = source.find_all('div', class_ = "review-item text-gray-darker")

sid = SentimentIntensityAnalyzer()  

sum_review = '' 

driver.close()

for review in review_list:

list1 = []


score = review.find('span').get_text()
title = review.find('a').get_text().replace('\n', '')
writer = review.find('div', {'class': 'small text-gray mb-2'}).get_text()
date = review.find('span', {'class': 'review-date'}).get_text()
content = review.find('div', {'class': 'truncated-text size-16'}).get_text()



list1.append(score)
list1.append(title)
list1.append(writer)
list1.append(date)
list1.append(content)
sum_review = sum_review + content

lines_list = tokenize.sent_tokenize(content)

非常感谢您的回答!

【问题讨论】:

    标签: python python-3.x web-scraping beautifulsoup web-crawler


    【解决方案1】:
    import requests
    import re
    import json
    import pandas as pd
    
    
    def main(url):
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0'
        }
        r = requests.get(url, headers=headers)
        match = json.loads(
            re.search(r'__PRELOADED_STATE__ = ({.+})', r.text).group(1))
        allin = []
        for item in match['consumerReviews']['consumerReviews']['reviews']:
            goal = [
                item['author']['authorName'],
                item['created'],
                item['vehicleRating']['overall'],
                item['title'],
                item['text']
            ]
            allin.append(goal)
        df = pd.DataFrame(
            allin, columns=['Author', 'Date', 'Rate', 'Title', 'Content'])
        df.to_csv('Data.csv', index=False)
        print(df)
    
    
    main('https://www.edmunds.com/kia/telluride/2021/consumer-reviews/?pagesize=50')
    

    【讨论】:

    • 哇——太棒了。你是一个出色的问题解决者.. 非常感谢这个使用 pands 的好例子
    • 亲爱的艾哈迈德 - 这似乎完全是你的事 - 猜猜这需要你解决它stackoverflow.com/questions/66111803/… 很多很多的问候 - 一位老朋友,你去年帮助过几次...... ;) 很多问候苏伊士 ;)
    猜你喜欢
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多