Автор оригинала: Prakhar Thapak.
Основная идея состоит в том, чтобы удалить важные функции с веб-страницы, чтобы мы могли использовать этот набор данных для прогнозирования того, является ли клиент, который сделал обзор, настоящим парнем или платным рецензентом.
Мы бы использовали некоторые интересные методы машинного обучения, чтобы придумать модель в следующем посте, но сейчас мы стремимся создать набор данных, чтобы мы могли использовать его в качестве функций для нашей модели.
Особенности, которые нас интересуют, – это имя человека и его друг.Общее количество фотографий, которые он загрузил до настоящего времени, а также количество просмотров.Мы также проверим,является ли он/она элитным членом,а также общее количество проверок и некоторые другие функции,такие как Funny Count, Cool Count, Useful Count, Длина обзора.
Мы бы сохранили эти функции в csv-файле .
import bs4 #importing soup from urllib.request import urlopen as url #importing urllib for url request from bs4 import BeautifulSoup as soup x=0 filename="datasets.csv" #saving data as csv f=open(filename,"w") headers="Name,Friend Count,Photo Count,Review Count,Elite Member,Funny Count,Cool Count,Useful Count,Review Length,Checkin Count\n" #these are the features that are scraped f.write(headers) for _ in range(4): #regex could have been used here but this is to increment the url page(keeping it simple.) my_url="https://www.yelp.com/biz/juicology-new-york?start="+str(x) request=url(my_url)#taking url as a paramter htmlscrap=request.read() request.close() page_soup=soup(htmlscrap,"html.parser")#parsing as html container=page_soup.findAll("div",{"class":"review review--with-sidebar"})#the class name where all the features are contained #print(len(container)) for i in container: #print(containers) friend_counter=i.findAll("li",{"class":"friend-count responsive-small-display-inline-block"}) friend_count=friend_counter[0].b.text review_counter=i.findAll("li",{"class":"review-count responsive-small-display-inline-block"}) review_count=review_counter[0].b.text photo_counter=i.findAll("li",{"class":"photo-count responsive-small-display-inline-block"}) if photo_counter: photo_count=photo_counter[0].b.text else: photo_count=0 elite_counter=i.findAll("li",{"class":"is-elite responsive-small-display-inline-block"}) if elite_counter: elite_count=1 else: elite_count=0 funny_counter=i.findAll("a",{"class":"ybtn ybtn--small funny js-analytics-click"}) funny_count1=funny_counter[0].findAll("span",{"class":"count"}) funny_count=funny_count1[0].text if funny_count: funny_count=funny_count else: funny_count=0 cool_counter=i.findAll("a",{"class":"ybtn ybtn--small cool js-analytics-click"}) cool_count1=cool_counter[0].findAll("span",{"class":"count"}) cool_count=cool_count1[0].text if cool_count: cool_count=cool_count else: cool_count=0 useful_counter=i.findAll("a",{"class":"ybtn ybtn--small useful js-analytics-click"}) useful_count1=useful_counter[0].findAll("span",{"class":"count"}) useful_count=useful_count1[0].text if useful_count: useful_count=useful_count else: useful_count=0 user_counter=i.findAll("a",{"class":"user-display-name js-analytics-click"}) user_count=user_counter[0].text rating_counter=i.findAll("div",{"class":"biz-rating biz-rating-large clearfix"}) rating_count=rating_counter[0].div.div["title"] rating_count=(int(rating_count[0])) length_counter=i.findAll("p",{"lang":"en"}) xx=str(length_counter[0]) length_count=len(xx) #print(length_count) checkin_counter=i.findAll("li",{"class":"review-tags_item"}) if checkin_counter: var1=checkin_counter[0].text.strip() checkin_count=(int(var1[0])) else: checkin_count=0 f.write(str(user_count) + "," + str(friend_count) + "," + str(photo_count) + "," + str(review_count)+","+str(elite_count)+","+str(funny_count)+","+str(cool_count)+","+str(useful_count)+","+str(length_count)+","+str(checkin_count) +"\n") x=x+20 f.close()