
這是我正在使用的代碼,但是當涉及到上述標簽時它不起作用
data = []
ua = UserAgent()
header = {'User-Agent':str(ua.safari)}
url = 'https://www.edmunds.com/tesla/model-3/2019/consumer-reviews/'
response = requests.get(url, headers=header)
html_soup = BeautifulSoup(response.text, 'lxml')
content_list = html_soup.find_all('div', attrs={'class': 'review-item'})
for e in content_list:
d = {'review_title': e.a.text,
'review_content': e.select_one('p').text,
'overall_rating': e.select_one('span.sr-only').text,
'reviewer_name':e.div.text.split(',')[0].strip(),
'review_date':e.div.text.split(',')[1].strip(),
}
data.append(d)
df = pd.DataFrame(data)
df1 = df.drop_duplicates(subset=['reviewer_name', 'review_title'], keep='first')
基本上,我想要實作的是為每個星級評分設定列,例如安全性:5.0、性能:5.0、舒適度:5.0 等等。
我試圖使用這部分代碼:
d.update(dict(s.stripped_strings for s in e.select('span.rating-stars span.sr-only')))
data.append(d)
但是它不起作用。此外,包含總體星級和詳細星級的標簽具有相同的等級,不同之處在于這兩個標簽在不同的標簽下(希望我沒有把它復雜化太多)。無論如何,我希望有人可以幫助我。
編輯 我編輯了一個代碼,因為我粘貼的那個似乎不起作用,這很奇怪
uj5u.com熱心網友回復:
一般來說stripped_strings,正確選擇元素會很安靜:
d.update(dict(s.stripped_strings for s in e.select('dl')))
key由于您預期的輸出,我建議您分別選擇字串value:
...
d.update({s.dt.text:float(s.dd.text.split()[0]) for s in e.select('dl')})
data.append(d)
...
這將更新您dict:
{'Safety': 5.0, 'Technology': 5.0, 'Performance': 5.0, 'Interior': 5.0, 'Comfort': 5.0, 'Reliability': 5.0, 'Value': 5.0}
或者如果沒有ResultSet空的dict.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/460062.html
