2016-03-16 80 views
0

我正在學習自己的網頁抓取,我試圖在Yelp上作爲練習取消評論者的評分。通常,我可以使用CSS選擇器或XPath方法來選擇我感興趣的內容。但是,這些方法不適用於選擇評論者的評分。例如,在以下頁面:https://www.yelp.com/user_details_reviews_self?userid=0S6EI51ej5J7dgYz3-O0lA。第一個評級的CSS選擇器是'.stars_2'。但是,如果我在RSelenium代碼中使用此選擇器,如下所示:如何從Yelp中提取評論者的評分。

 ratings=remDr$findElements('css selector','.stars_2') 

    ratings=unlist(lapply(ratings, function(x){x$getElementText()})) 

我得到NULL。我認爲原因是評級實際上是一個圖像。我在這裏粘貼網頁源代碼的一小部分:

  <div class="review-content"> 
      <div class="review-content"> 
      <div class="biz-rating biz-rating-very-large clearfix"> 
      <div>   
      <div class="rating-very-large"> 
      <i class="star-img stars_2" title="2.0 star rating"> 
      <img alt="2.0 star rating" class="offscreen" height="303" src="//s3-media4.fl.yelpcdn.com/assets/srv0/yelp_styleguide/c2252a4cd43e/assets/img/stars/stars_map.png" width="84"> 
    </i> 
</div> 


    </div> 

基本上,如果我可以提取類文本=「STAT-IMG STARS_2」或標題=「2.0星級」然後我好。誰可以幫我這個事?請,我真的想知道。

回答

1

怎麼樣使用頁面的HTML正則表達式,是這樣的:

>>> import requests 
>>> url = 'http://www.yelp.com/user_details_reviews_self?userid=0S6EI51ej5J7dgYz3-O0lA' 
>>> html = requests.get(url).text 
>>> import re 
>>> rating_pattern = re.compile(r'\d.\d star rating">') 
>>> for rating in re.findall(rating_pattern, html): 
...  print(rating) 
... 
2.0 star rating"> 
4.0 star rating"> 
5.0 star rating"> 
5.0 star rating"> 
5.0 star rating"> 
5.0 star rating"> 
5.0 star rating"> 
2.0 star rating"> 
4.0 star rating"> 
2.0 star rating"> 
+0

嘗試了你的代碼。它確實有用!非常感謝! – Ray

0

這會滿足嗎?

source = driver.page_source # gets page source of current page 
images = source.split("<img")[1:] 
for image in images: 
    if "star rating" in image: 
     rating = image.split('''alt="''')[1] 
     rating = rating.split("star")[0] 
     rating = float(rating) 
     print rating 
     break 
+0

謝謝!你的代碼適合我! – Ray