Collecting Review/User Data from Steam


In [1]:
# Let's say that the URL for a game is the following
url = 'http://steamcommunity.com/app/730/homecontent/?userreviewsoffset=0&p=1&itemspage=1&screenshotspage=1&videospage=1&artpage=1&allguidepage=1&webguidepage=1&integratedguidepage=1&discussionspage=1&appid=730&appHubSubSection=10&appHubSubSection=10&l=english&browsefilter=toprated&filterLanguage=default&searchText=&forceanon=1'
# The game is actually Counter-Strike: Global Offensive (CS: GO)
# It's difficult to see, but there are a few parts of the URL that are of
# interest to us
# 1. '/app/730' tells us that the appid is 730, which corresponds to
#    Counter-Strike: Global Offensive (CS: GO)
#    - this info is also later in the URL: 'appid=730'
# 2. 'userreviewsoffset=0' - this is the start number for the review results
#    - if 0, that means that the reviews we see will be 0 through 9
#    - if 1, 10 through 19, etc.
# 3. there are numerous parts that end in 'page=1' - the number here refers
#    to an iterator that stores how many 10-review pages you've seen (i.e.,
#    usually by hovering at the bottom of the reviews results page to make
#    more visible)
#    - userreviewsoffset = 0, then page should be 1
#    - if userreviewsoffset = 10, then page should be 2,
#    - if userreviewsoffset = 20, then page should be 3,
#    - etc.
# So, this will allow us to make a for loop to go through all possible pages
# of reviews!

In [26]:
# Let's redefine the URL with format specifiers so that we use the URL in
# a loop
# We'll set the game ID (appid), range beginning value (range_begin), and
# increment value (i)
appid = '730'
range_begin = '0'
i = '1'
url = 'http://steamcommunity.com/app/{0}/homecontent/?userreviewsoffset={1}&p=1&itemspage={2}&screenshotspage={2}&videospage={2}&artpage={2}&allguidepage={2}&webguidepage={2}&integratedguidepage={2}&discussionspage={2}&appid={0}&appHubSubSection=10&appHubSubSection=10&l=english&browsefilter=toprated&filterLanguage=default&searchText=&forceanon=1'.format(appid, range_begin, i)
print(url)


http://steamcommunity.com/app/730/homecontent/?userreviewsoffset=0&p=1&itemspage=1&screenshotspage=1&videospage=1&artpage=1&allguidepage=1&webguidepage=1&integratedguidepage=1&discussionspage=1&appid=730&appHubSubSection=10&appHubSubSection=10&l=english&browsefilter=toprated&filterLanguage=default&searchText=&forceanon=1

In [27]:
# The link above will not work if you try to go to it directly
# However, if you go to the link and then try to view the source HTML,
# you will be able to see the HTML

In [28]:
# We can read, parse, and then extract the content at the URL using
# requests and bs4 (and lxml) modules
from bs4 import BeautifulSoup
from lxml import html
import requests

In [29]:
# Let's use requests.get() to get the page
page = requests.get(url)

In [30]:
# Let's take a look at the attributes of the page object
[a for a in dir(page) if not a.startswith('_') and not a.endswith('_')]
# Don't worry about the code here, it's just a trick to see public
# methods for a requests object


Out[30]:
['apparent_encoding',
 'close',
 'connection',
 'content',
 'cookies',
 'elapsed',
 'encoding',
 'headers',
 'history',
 'is_permanent_redirect',
 'is_redirect',
 'iter_content',
 'iter_lines',
 'json',
 'links',
 'ok',
 'raise_for_status',
 'raw',
 'reason',
 'request',
 'status_code',
 'text',
 'url']

In [31]:
# We see that there are attributes for the text, json, lines, etc.,
# so let's take a look at some of this stuff
page.text[:1000] # Here's the raw HTML


Out[31]:
'\t\t<div id="page1">\r\n\t\t<div class="apphub_Card modalContentLink interactable" style="display: none" data-modal-content-url="http://steamcommunity.com/profiles/76561198092689293/recommended/730/" data-modal-content-sizetofit="false">\r\n\t<div class="apphub_CardContentMain">\r\n\t\t<div class="apphub_UserReviewCardContent">\r\n\t\t\t<div class="found_helpful">\r\n\t\t\t\t6,215 of 6,692 people (93%) found this review helpful<br>113 people found this review funny\t\t\t</div>\r\n\r\n\t\t\t<div class="vote_header">\r\n\t\t\t\t\t\t\t\t<div class="reviewInfo">\r\n\t\t\t\t\t<div class="thumb">\r\n\t\t\t\t\t\t<img src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44" height="44">\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<div class="title">Recommended</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="hours">160.8 hrs on record</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t<div style="clear: left"></div>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class="apphub_CardTextContent">\r\n\t\t\t\t<div class="date_posted">Posted: February 13</div>\r\n\t\t\t\t\t\t\t\tIf i had a dollar for '

In [32]:
# After looking at some of the other attributes, I've determined
# that the text attribute is probably the only thing that
# concerns us, so let's use it
text = page.text

In [33]:
# The text, as you can see from the view above, has lots of \r,
# \n, \t characters in it, which might not be good for HTML
# parsing in our case (I won't get into why, partly because I'm
# not completely sure I get why), so let's get rid of all such
# characters, replacing them with spaces instead
# To do this we will use the re module, which allows us to use
# regular expressions
import re
# While we're at it, it's best to get rid of all "<br>" tags since
# they could also present problems during parsing
# We can use the re.sub() method to find one regular expression and
# replace it with another in a given text
text = re.sub(r'\<br\>', r' ', text) # Looks for the string "<br>"
    # and replaces it with a space
text = re.sub(r'[\n\t\r ]+', r' ', text) # Looks for any sequence
    # of carriage returns or whitespace characters and replaces
    # them with a single space
text = text.strip() # Get rid of spaces at either end

In [34]:
# Let's take a look at the cleaned-up version of the source HTML
text[:1000]


Out[34]:
'<div id="page1"> <div class="apphub_Card modalContentLink interactable" style="display: none" data-modal-content-url="http://steamcommunity.com/profiles/76561198092689293/recommended/730/" data-modal-content-sizetofit="false"> <div class="apphub_CardContentMain"> <div class="apphub_UserReviewCardContent"> <div class="found_helpful"> 6,215 of 6,692 people (93%) found this review helpful 113 people found this review funny </div> <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44" height="44"> </div> <div class="title">Recommended</div> <div class="hours">160.8 hrs on record</div> </div> <div style="clear: left"></div> </div> <div class="apphub_CardTextContent"> <div class="date_posted">Posted: February 13</div> If i had a dollar for each time someone screamed at me in another language, i\'d still have no money because i spent it on skins </div> </div> <div c'

In [11]:
# Ok, that looks much nicer!

In [121]:
# Now, let's try to use bs4 to extract data from the cleaned-up HTML
soup = BeautifulSoup(text, "lxml")

In [18]:
soup.contents[0]


Out[18]:
<html><body><div id="page1"> <div class="apphub_Card modalContentLink interactable" data-modal-content-sizetofit="false" data-modal-content-url="http://steamcommunity.com/profiles/76561198092689293/recommended/730/" style="display: none"> <div class="apphub_CardContentMain"> <div class="apphub_UserReviewCardContent"> <div class="found_helpful"> 6,151 of 6,621 people (93%) found this review helpful 29 people found this review funny </div> <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">160.8 hrs on record</div> </div> <div style="clear: left"></div> </div> <div class="apphub_CardTextContent"> <div class="date_posted">Posted: February 13</div> If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins </div> </div> <div class="UserReviewCardContent_Footer"> <div class="gradient"> </div> </div> </div> <div class="apphub_CardContentAuthorBlock tall"> <div class="apphub_friend_block_container"> <a href="http://steamcommunity.com/profiles/76561198092689293/"> <div class="apphub_friend_block" data-miniprofile="132423565"> <div class="appHubIconHolder offline"><img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/19/19a055c1c4c65c51eab9ba175051ef06fc3d1831.jpg"/></div> <div class="appHubIconHolder greyOverlay"></div> <div class="apphub_CardContentAuthorName offline ellipsis"><a href="http://steamcommunity.com/profiles/76561198092689293/">BakeACake</a></div> <div class="apphub_CardContentMoreLink ellipsis">22 products in account</div> </div> </a> </div> <div class="apphub_UserReviewCardStats"> <div class="apphub_CardCommentCount alignNews">31</div> </div> <div style="clear: left"></div> </div> </div><div class="apphub_Card modalContentLink interactable" data-modal-content-sizetofit="false" data-modal-content-url="http://steamcommunity.com/id/Delta3D/recommended/730/" style="display: none"> <div class="apphub_CardContentMain"> <div class="apphub_UserReviewCardContent"> <div class="found_helpful"> 9,590 of 10,482 people (91%) found this review helpful 9 people found this review funny </div> <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">382.5 hrs on record</div> </div> <div style="clear: left"></div> </div> <div class="apphub_CardTextContent"> <div class="date_posted">Posted: February 1</div> It's like roulette; fun until it turns into Russian. </div> </div> <div class="UserReviewCardContent_Footer"> <div class="gradient"> </div> </div> </div> <div class="apphub_CardContentAuthorBlock tall"> <div class="apphub_friend_block_container"> <a href="http://steamcommunity.com/id/Delta3D/"> <div class="apphub_friend_block" data-miniprofile="63720612"> <div class="appHubIconHolder offline"><img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/51/51f0f8b0ca2012ed5e49556228410cb443f6e908.jpg"/></div> <div class="appHubIconHolder greyOverlay"></div> <div class="apphub_CardContentAuthorName offline ellipsis"><a href="http://steamcommunity.com/id/Delta3D/">Delta</a></div> <div class="apphub_CardContentMoreLink ellipsis">119 products in account</div> </div> </a> </div> <div class="apphub_UserReviewCardStats"> <div class="apphub_CardCommentCount alignNews">74</div> </div> <div style="clear: left"></div> </div> </div><div class="apphub_Card modalContentLink interactable" data-modal-content-sizetofit="false" data-modal-content-url="http://steamcommunity.com/id/kadiv/recommended/730/" style="display: none"> <div class="apphub_CardContentMain"> <div class="apphub_UserReviewCardContent"> <div class="found_helpful"> 15,517 of 17,300 people (90%) found this review helpful 1 person found this review funny </div> <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">1,176.1 hrs on record</div> </div> <div style="clear: left"></div> </div> <div class="apphub_CardTextContent"> <div class="date_posted">Posted: February 27, 2014</div> you either die a noob or live long enough to get called a hacker </div> </div> <div class="UserReviewCardContent_Footer"> <div class="gradient"> </div> </div> </div> <div class="apphub_CardContentAuthorBlock tall"> <div class="apphub_friend_block_container"> <a href="http://steamcommunity.com/id/kadiv/"> <div class="apphub_friend_block" data-miniprofile="99493655"> <div class="appHubIconHolder offline"><img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/20/201f1deaec86716a83457f785b200e7c3b434451.jpg"/></div> <div class="appHubIconHolder greyOverlay"></div> <div class="apphub_CardContentAuthorName offline ellipsis"><a href="http://steamcommunity.com/id/kadiv/">compliKATIEd</a></div> <div class="apphub_CardContentMoreLink ellipsis">114 products in account</div> </div> </a> </div> <div class="apphub_UserReviewCardStats"> <div class="apphub_CardCommentCount alignNews">174</div> </div> <div style="clear: left"></div> </div> </div><div class="apphub_Card modalContentLink interactable" data-modal-content-sizetofit="false" data-modal-content-url="http://steamcommunity.com/id/knal/recommended/730/" style="display: none"> <div class="apphub_CardContentMain"> <div class="apphub_UserReviewCardContent"> <div class="found_helpful"> 3,970 of 4,401 people (90%) found this review helpful 9 people found this review funny </div> <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">575.9 hrs on record</div> </div> <div style="clear: left"></div> </div> <div class="apphub_CardTextContent"> <div class="date_posted">Posted: January 14</div> Your self-esteem either dies in this game or it inflates to unbearable proportions. </div> </div> <div class="UserReviewCardContent_Footer"> <div class="gradient"> </div> </div> </div> <div class="apphub_CardContentAuthorBlock tall"> <div class="apphub_friend_block_container"> <a href="http://steamcommunity.com/id/knal/"> <div class="apphub_friend_block" data-miniprofile="39900571"> <div class="appHubIconHolder offline"><img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/a8/a8c445d4a91ca95fc4314b1fbd58dc8f92726b89.jpg"/></div> <div class="appHubIconHolder greyOverlay"></div> <div class="apphub_CardContentAuthorName offline ellipsis"><a href="http://steamcommunity.com/id/knal/">Knalraap</a></div> <div class="apphub_CardContentMoreLink ellipsis">390 products in account</div> </div> </a> </div> <div class="apphub_UserReviewCardStats"> <div class="apphub_CardCommentCount alignNews">29</div> </div> <div style="clear: left"></div> </div> </div><div class="apphub_Card modalContentLink interactable" data-modal-content-sizetofit="false" data-modal-content-url="http://steamcommunity.com/profiles/76561198003457024/recommended/730/" style="display: none"> <div class="apphub_CardContentMain"> <div class="apphub_UserReviewCardContent"> <div class="found_helpful"> 19,694 of 22,019 people (89%) found this review helpful 1 person found this review funny </div> <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">730.5 hrs on record</div> </div> <div style="clear: left"></div> </div> <div class="apphub_CardTextContent"> <div class="date_posted">Posted: July 13, 2014</div> Kill someone with a P90 - "You're a fuc**** noob!! Noob weapon!!" Kill someone with a P90 through a smoke - "You're a fuc**** hacker!!" Kill someone with a AWP - "You're a fuc**** noob!! Noob weapon!!" Kill someone with a AWP through a door - "You're a fuc**** hacker!!" In a 1 vs 5 you die - "You're a fuc**** noob!!" In a 1 vs 5 you win - "You're a fuc**** hacker!!" Kill someone with a headshot - "Hacker!!" Get headshoted by someone - "Owned!!" and get teabagged Kill someone with a grenade - "Luck!!" Get killed by someone with a grenade - "AHAHAHAHA" Get teamkilled by someone - "Get out of the way you fuc**** idiot!!" Accidentally teamkill someone - "You're a fuc**** idiot!!" Blocked by someone - Dies Accidentally blocks someone - "Get out the way you fuc**** idiot!!" Decide to save - "You're a fuc**** coward!!" Decide not to save - "Save you fuc**** idiot!!" Kill someone while defending the bomb - "You fuc**** camper!!" Kill someone while defending the hostages - "You fuc**** camper!!" Someone dies - The deceased one starts to rage Your team lose the round - Your team starts to rage Your team is losing 10-2 - Someone rages quit Go to the balcony in Italy - "You fuc**** hacker!!" Worst guy receives a drop - "Are you fuc**** serious!?" Warm up - Everybody tries to spawn kill Score is 5-1 in your favor - "This is a T map!" Score is 1-5 againts you - "This is a CT map!" Lose the first 2 rounds - Someone asks to get kicked Last round - Everybody buys Negev Your team is loosinh and you are in last - Someone vote kicks you Win a match - All enemy team rages Lose a match - Yout team rages Someone's Internet crashes - 30 minutes ban Your Internet crashes - 7 days ban 10/10 Best rage simulator out there! </div> </div> <div class="UserReviewCardContent_Footer"> <div class="gradient"> </div> </div> </div> <div class="apphub_CardContentAuthorBlock tall"> <div class="apphub_friend_block_container"> <a href="http://steamcommunity.com/profiles/76561198003457024/"> <div class="apphub_friend_block" data-miniprofile="43191296"> <div class="appHubIconHolder offline"><img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/ad/ad23fa77140d73467aacd7dfa979ef809511d362.jpg"/></div> <div class="appHubIconHolder greyOverlay"></div> <div class="apphub_CardContentAuthorName offline ellipsis"><a href="http://steamcommunity.com/profiles/76561198003457024/">Fokogrilo</a></div> <div class="apphub_CardContentMoreLink ellipsis">220 products in account</div> </div> </a> </div> <div class="apphub_UserReviewCardStats"> <div class="apphub_CardCommentCount alignNews">520</div> </div> <div style="clear: left"></div> </div> </div><div class="apphub_Card modalContentLink interactable" data-modal-content-sizetofit="false" data-modal-content-url="http://steamcommunity.com/id/hiaympalliman/recommended/730/" style="display: none"> <div class="apphub_CardContentMain"> <div class="apphub_UserReviewCardContent"> <div class="found_helpful"> 10,346 of 11,559 people (90%) found this review helpful 1 person found this review funny </div> <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">82.9 hrs on record</div> </div> <div style="clear: left"></div> </div> <div class="apphub_CardTextContent"> <div class="date_posted">Posted: September 1, 2014</div> Bought this game, played online, learned fluent russian 2 weeks later. </div> </div> <div class="UserReviewCardContent_Footer"> <div class="gradient"> </div> </div> </div> <div class="apphub_CardContentAuthorBlock tall"> <div class="apphub_friend_block_container"> <a href="http://steamcommunity.com/id/hiaympalliman/"> <div class="apphub_friend_block" data-miniprofile="89835438"> <div class="appHubIconHolder online"><img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/f3/f3da7f18f8f9a1c9a7f9533a8a69ed6c53af7cc0.jpg"/></div> <div class="appHubIconHolder greyOverlay"></div> <div class="apphub_CardContentAuthorName online ellipsis"><a href="http://steamcommunity.com/id/hiaympalliman/">Mr. Palliman</a></div> <div class="apphub_CardContentMoreLink ellipsis">59 products in account</div> </div> </a> </div> <div class="apphub_UserReviewCardStats"> <div class="apphub_CardCommentCount alignNews">132</div> </div> <div style="clear: left"></div> </div> </div><div class="apphub_Card modalContentLink interactable" data-modal-content-sizetofit="false" data-modal-content-url="http://steamcommunity.com/id/ZoomaAP/recommended/730/" style="display: none"> <div class="apphub_CardContentMain"> <div class="apphub_UserReviewCardContent"> <div class="found_helpful"> 8,877 of 9,939 people (89%) found this review helpful 16 people found this review funny </div> <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">483.9 hrs on record</div> </div> <div style="clear: left"></div> </div> <div class="apphub_CardTextContent"> <div class="date_posted">Posted: January 24</div> &gt;see a guy &gt;shoot him &gt;miss every shot &gt;he turns around &gt;kills me in one shot &gt;exit cs:go 10/10 </div> </div> <div class="UserReviewCardContent_Footer"> <div class="gradient"> </div> </div> </div> <div class="apphub_CardContentAuthorBlock tall"> <div class="apphub_friend_block_container"> <a href="http://steamcommunity.com/id/ZoomaAP/"> <div class="apphub_friend_block" data-miniprofile="68226241"> <div class="appHubIconHolder offline"><img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/38/387b1a115d7227c105e8f713191b3bfbeab370b9.jpg"/></div> <div class="appHubIconHolder greyOverlay"></div> <div class="apphub_CardContentAuthorName offline ellipsis"><a href="http://steamcommunity.com/id/ZoomaAP/">Zooma</a></div> <div class="apphub_CardContentMoreLink ellipsis">8 products in account</div> </div> </a> </div> <div class="apphub_UserReviewCardStats"> <div class="apphub_CardCommentCount alignNews">91</div> </div> <div style="clear: left"></div> </div> </div><div class="apphub_Card modalContentLink interactable" data-modal-content-sizetofit="false" data-modal-content-url="http://steamcommunity.com/id/RevanDaDragon/recommended/730/" style="display: none"> <div class="apphub_CardContentMain"> <div class="apphub_UserReviewCardContent"> <div class="found_helpful"> 8,848 of 9,944 people (89%) found this review helpful 24 people found this review funny </div> <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">3,495.1 hrs on record</div> </div> <div style="clear: left"></div> </div> <div class="apphub_CardTextContent"> <div class="date_posted">Posted: March 17</div> Revan was only 23 years old. He loved CS:GO so much. He had most of the achievements and items. He prayed to Gaben every night before bed, thanking him for the inventory he's been given. "CS:GO is love," he says, "CS:GO is life." His elder Dragon hears him and calls him a silver scrublord. He knows his elder is just jealous of his son's devotion to Gabe. He calls him a console peasant. He slaps him and sends him to sleep. He's crying now and his face hurts. He lays in bed, and it's really cold. He feels a warmth moving towards him. He looks up. It's Gabe! He's so happy, Gabe whispers into Revan's ear, "Try your chances... Open a case." Gaben grabs Revan with his powerful dev-team hands and puts him on his hands and knees. He's ready. Revan opens his pockets for Gabe. Gabe puts his hands deep into Revan's pockets. It costs so much, but Revan does it for CS:GO. Revan can feel his wallet emptying as his eyes start to water. He accepts the terms and conditions. Revan wants to please Gabe. Gaben lets out a mighty roar as he fills Revan's computer with keys. Revan opens all the cases and gets nothing worth anything at all. <b>CS:GO is love... CS:GO is life... </b> <i>EDIT: Please stop adding me because of this review. If you liked it, ♥♥♥♥ing put a comment down there, stop adding me just to tell me you liked it, seriously...</i> </div> </div> <div class="UserReviewCardContent_Footer"> <div class="gradient"> </div> </div> </div> <div class="apphub_CardContentAuthorBlock tall"> <div class="apphub_friend_block_container"> <a href="http://steamcommunity.com/id/RevanDaDragon/"> <div class="apphub_friend_block" data-miniprofile="80405427"> <div class="appHubIconHolder offline"><img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/bd/bd579e95e53808b272c692ba615acc5ec6cf0558.jpg"/></div> <div class="appHubIconHolder greyOverlay"></div> <div class="apphub_CardContentAuthorName offline ellipsis"><a href="http://steamcommunity.com/id/RevanDaDragon/">¤Revan The Dragon¤ COMMUNITY BAN</a></div> <div class="apphub_CardContentMoreLink ellipsis"></div> </div> </a> </div> <div class="apphub_UserReviewCardStats"> <div class="apphub_CardCommentCount alignNews">197</div> </div> <div style="clear: left"></div> </div> </div><div class="apphub_Card modalContentLink interactable" data-modal-content-sizetofit="false" data-modal-content-url="http://steamcommunity.com/id/greybutnotgey/recommended/730/" style="display: none"> <div class="apphub_CardContentMain"> <div class="apphub_UserReviewCardContent"> <div class="found_helpful"> 5,067 of 5,693 people (89%) found this review helpful 1 person found this review funny </div> <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">300.5 hrs on record</div> </div> <div style="clear: left"></div> </div> <div class="apphub_CardTextContent"> <div class="date_posted">Posted: December 14, 2014</div> Knife = free Knife with paint on it = 200$ 5000 likes time to jump off a building </div> </div> <div class="UserReviewCardContent_Footer"> <div class="gradient"> </div> </div> </div> <div class="apphub_CardContentAuthorBlock tall"> <div class="apphub_friend_block_container"> <a href="http://steamcommunity.com/id/greybutnotgey/"> <div class="apphub_friend_block" data-miniprofile="43857747"> <div class="appHubIconHolder offline"><img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/ed/ed524289519af04f390fdeaa17873c298c417061.jpg"/></div> <div class="appHubIconHolder greyOverlay"></div> <div class="apphub_CardContentAuthorName offline ellipsis"><a href="http://steamcommunity.com/id/greybutnotgey/">Sir Grayson</a></div> <div class="apphub_CardContentMoreLink ellipsis">153 products in account</div> </div> </a> </div> <div class="apphub_UserReviewCardStats"> <div class="apphub_CardCommentCount alignNews">29</div> </div> <div style="clear: left"></div> </div> </div><div class="apphub_Card modalContentLink interactable" data-modal-content-sizetofit="false" data-modal-content-url="http://steamcommunity.com/id/End3rb0rn/recommended/730/" style="display: none"> <div class="apphub_CardContentMain"> <div class="apphub_UserReviewCardContent"> <div class="found_helpful"> 11,568 of 13,088 people (88%) found this review helpful 1 person found this review funny </div> <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">953.3 hrs on record</div> </div> <div style="clear: left"></div> </div> <div class="apphub_CardTextContent"> <div class="date_posted">Posted: November 1, 2014</div> Knife in real life: 10$ Knife in game: 400$ 10/10 </div> </div> <div class="UserReviewCardContent_Footer"> <div class="gradient"> </div> </div> </div> <div class="apphub_CardContentAuthorBlock tall"> <div class="apphub_friend_block_container"> <a href="http://steamcommunity.com/id/End3rb0rn/"> <div class="apphub_friend_block" data-miniprofile="93373938"> <div class="appHubIconHolder offline"><img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/3f/3ff6b444ae38d7ab1799618377f0c07980521545.jpg"/></div> <div class="appHubIconHolder greyOverlay"></div> <div class="apphub_CardContentAuthorName offline ellipsis"><a href="http://steamcommunity.com/id/End3rb0rn/">Enderborn</a></div> <div class="apphub_CardContentMoreLink ellipsis">165 products in account</div> </div> </a> </div> <div class="apphub_UserReviewCardStats"> <div class="apphub_CardCommentCount alignNews">114</div> </div> <div style="clear: left"></div> </div> </div> <script> $J(function() { RequestCurrentUserRecommendationVotes( ["14446233","14283984","9279237","13990330","11218251","11953345","14147153","14939094","13374032","12724369"] ); } ); </script> </div> <form action="http://steamcommunity.com/app/730/homecontent/" id="MoreContentForm1" method="GET" name="MoreContentForm1"> <input name="userreviewsoffset" type="hidden" value="10"/><input name="p" type="hidden" value="2"/><input name="itemspage" type="hidden" value="2"/><input name="screenshotspage" type="hidden" value="2"/><input name="videospage" type="hidden" value="2"/><input name="artpage" type="hidden" value="2"/><input name="allguidepage" type="hidden" value="2"/><input name="webguidepage" type="hidden" value="2"/><input name="integratedguidepage" type="hidden" value="2"/><input name="discussionspage" type="hidden" value="2"/><input name="appid" type="hidden" value="730"/><input name="appHubSubSection" type="hidden" value="10"/> <input name="l" type="hidden" value="english"/> <input name="appHubSubSection" type="hidden" value="10"/> <input name="browsefilter" type="hidden" value="toprated"/> <input name="filterLanguage" type="hidden" value="default"/> <input name="searchText" type="hidden" value=""/> <input name="forceanon" type="hidden" value="1"/> </form></body></html>

In [122]:
# The parts of the review that we want are the following:
# 1) <div class="apphub_CardContentMain"... ==> contains links to the reviewer's profile,
#    typically like the following entry: "onclick="ShowModalContent(
#    'http://steamcommunity.com/profiles/76561198092689293/recommended/730/?insideModal=1',
#    'http://steamcommunity.com/profiles/76561198092689293/recommended/730/',
#    'http://steamcommunity.com/profiles/76561198092689293/recommended/730/',false );""
#    - these links are notable for the following reasons:
#      i) is the number in the link itself the reviwer's ID number? if so, maybe it can be used
#         with Steam API...
#      ii) if the link is followed, the profile page lists some info that is not included here,
#          such as the reviewer's handle (ok, that is included here, but it's a little buried),
#          how many hours the reviewer has logged (for the game being reviewed) in the last two
#          weeks, whether or not the reviewer is "recommended" (at least seemingly), AND any
#          resulting discussion prompted by the review, etc.
#      iii) ALSO, the link itself can be shortened to lead you to the reviewer's profile page,
#           which has a lot of information, such as in-game achievements, level of player
#           (how many games owned), location of player (at least sometimes), and a lot more
# 2) <div div class="found_helpful"... ==> which will contain the number of people who found the
#    review helpful (and the total people who could have rated it (?) and the percentage
#    resulting from those two numbers) AND it will also contain the number of people who found
#    the review funny. typically, it will look like this "4,719 of 5,081 people (93%) found this
#    review helpful 73 people found this review funny"

# Given the fact that the first part includes the link all we really need to do is get the link,
# so let's just try to extract the links
review_sections = soup.find_all("div", "apphub_CardContentMain")
review = review_sections[1]

In [123]:
# There should be about 10 such reviews
len(review_sections)


Out[123]:
10

In [124]:
review.text


Out[124]:
"   9,641 of 10,541 people (91%) found this review helpful 62 people found this review funny       Recommended 383.4 hrs on record     Posted: February 1 It's like roulette; fun until it turns into Russian.    \xa0  "

In [43]:
#review.attrs

In [44]:
# Let's use the attrs attribute to get the list of links
#link_str = review.attrs['onclick']
#link = link_str.split(' ', 2)[1].strip('\',')
#link

In [115]:
link_blocks = list(soup.findAll('div',
                                'apphub_Card modalContentLink interactable'))
link_block = link_blocks[0]

In [116]:
review_url = link_block.attrs['data-modal-content-url']
review_url_split = review_url.split('/')
review_url


Out[116]:
'http://steamcommunity.com/profiles/76561198092689293/recommended/730/'

In [147]:
profile_url = '/'.join(review_url_split[:5])
profile_url


Out[147]:
'http://steamcommunity.com/profiles/76561198092689293'

In [118]:
list(review.children)


Out[118]:
[' ',
 <div class="apphub_UserReviewCardContent"> <div class="found_helpful"> 9,641 of 10,541 people (91%) found this review helpful 62 people found this review funny </div> <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">383.4 hrs on record</div> </div> <div style="clear: left"></div> </div> <div class="apphub_CardTextContent"> <div class="date_posted">Posted: February 1</div> It's like roulette; fun until it turns into Russian. </div> </div>,
 ' ',
 <div class="UserReviewCardContent_Footer"> <div class="gradient"> </div> </div>,
 ' ']

In [109]:
list(review.descendants)


Out[109]:
[' ',
 <div class="apphub_UserReviewCardContent"> <div class="found_helpful"> 6,151 of 6,621 people (93%) found this review helpful 29 people found this review funny </div> <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">160.8 hrs on record</div> </div> <div style="clear: left"></div> </div> <div class="apphub_CardTextContent"> <div class="date_posted">Posted: February 13</div> If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins </div> </div>,
 ' ',
 <div class="found_helpful"> 6,151 of 6,621 people (93%) found this review helpful 29 people found this review funny </div>,
 ' 6,151 of 6,621 people (93%) found this review helpful 29 people found this review funny ',
 ' ',
 <div class="vote_header"> <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">160.8 hrs on record</div> </div> <div style="clear: left"></div> </div>,
 ' ',
 <div class="reviewInfo"> <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div> <div class="title">Recommended</div> <div class="hours">160.8 hrs on record</div> </div>,
 ' ',
 <div class="thumb"> <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/> </div>,
 ' ',
 <img height="44" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1" width="44"/>,
 ' ',
 ' ',
 <div class="title">Recommended</div>,
 'Recommended',
 ' ',
 <div class="hours">160.8 hrs on record</div>,
 '160.8 hrs on record',
 ' ',
 ' ',
 <div style="clear: left"></div>,
 ' ',
 ' ',
 <div class="apphub_CardTextContent"> <div class="date_posted">Posted: February 13</div> If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins </div>,
 ' ',
 <div class="date_posted">Posted: February 13</div>,
 'Posted: February 13',
 " If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins ",
 ' ',
 ' ',
 <div class="UserReviewCardContent_Footer"> <div class="gradient"> </div> </div>,
 ' ',
 <div class="gradient"> </div>,
 '\xa0',
 ' ',
 ' ']

In [119]:
review.getText(separator=",,,")


Out[119]:
" ,,, ,,, 9,641 of 10,541 people (91%) found this review helpful 62 people found this review funny ,,, ,,, ,,, ,,, ,,, ,,, ,,,Recommended,,, ,,,383.4 hrs on record,,, ,,, ,,, ,,, ,,, ,,,Posted: February 1,,, It's like roulette; fun until it turns into Russian. ,,, ,,, ,,, ,,,\xa0,,, ,,, "

In [125]:
stripped_strings = list(review.stripped_strings)
stripped_strings


Out[125]:
['9,641 of 10,541 people (91%) found this review helpful 62 people found this review funny',
 'Recommended',
 '383.4 hrs on record',
 'Posted: February 1',
 "It's like roulette; fun until it turns into Russian."]

In [128]:
[len(list(review_sections[i].stripped_strings)) for i in range(10)]


Out[128]:
[5, 5, 5, 5, 5, 5, 5, 7, 5, 5]

In [131]:
list(review_sections[-3].stripped_strings)


Out[131]:
['8,909 of 10,016 people (89%) found this review helpful 123 people found this review funny',
 'Recommended',
 '3,496.2 hrs on record',
 'Posted: March 17',
 'Revan was only 23 years old. He loved CS:GO so much. He had most of the achievements and items. He prayed to Gaben every night before bed, thanking him for the inventory he\'s been given. "CS:GO is love," he says, "CS:GO is life." His elder Dragon hears him and calls him a silver scrublord. He knows his elder is just jealous of his son\'s devotion to Gabe. He calls him a console peasant. He slaps him and sends him to sleep. He\'s crying now and his face hurts. He lays in bed, and it\'s really cold. He feels a warmth moving towards him. He looks up. It\'s Gabe! He\'s so happy, Gabe whispers into Revan\'s ear, "Try your chances... Open a case." Gaben grabs Revan with his powerful dev-team hands and puts him on his hands and knees. He\'s ready. Revan opens his pockets for Gabe. Gabe puts his hands deep into Revan\'s pockets. It costs so much, but Revan does it for CS:GO. Revan can feel his wallet emptying as his eyes start to water. He accepts the terms and conditions. Revan wants to please Gabe. Gaben lets out a mighty roar as he fills Revan\'s computer with keys. Revan opens all the cases and gets nothing worth anything at all.',
 'CS:GO is love... CS:GO is life... \ufeff',
 'EDIT: Please stop adding me because of this review. If you liked it, ♥♥♥♥ing put a comment down there, stop adding me just to tell me you liked it, seriously...']

In [133]:
# Aberrant example that was found in a different review
stripped_strings2 = ['1,703 of 1,977 people (86%) found this review helpful 1 person found this review funny', 'Recommended', '598.1 hrs on record', 'Posted: January 17, 2014', "I've tried Rosetta Stone, duolingo, and even college classes, but nothing has taught me Russian or Brazilian better than this! And it's free!", '76 products in account', '21']
stripped_strings2
# It turns out that this review does not contain the user-name, so there's one less
# string in the list (hopefully, this review will be rejected due to the fact that
# it doesn't contain enough elements)


Out[133]:
['1,703 of 1,977 people (86%) found this review helpful 1 person found this review funny',
 'Recommended',
 '598.1 hrs on record',
 'Posted: January 17, 2014',
 "I've tried Rosetta Stone, duolingo, and even college classes, but nothing has taught me Russian or Brazilian better than this! And it's free!",
 '76 products in account',
 '21']

In [134]:
re.search(r', \d{4}$', 'January 17, 2014')


Out[134]:
<_sre.SRE_Match object; span=(10, 16), match=', 2014'>

In [135]:
# Let's try to parse the date
from dateutil import parser
date = parser.parse('January 17, 2014')
date.day


Out[135]:
17

In [136]:
# Aberrant review: no review text!
stripped_strings3 = ['805 of 962 people (84%) found this review helpful', 'Recommended', '682.5 hrs on record', 'Posted: January 22, 2014', 'K I N T E R', '77 products in account', '1']
stripped_strings3


Out[136]:
['805 of 962 people (84%) found this review helpful',
 'Recommended',
 '682.5 hrs on record',
 'Posted: January 22, 2014',
 'K I N T E R',
 '77 products in account',
 '1']

In [138]:
# Given the stripped_strings attribute, the relevant information can be extracted
# exceedingly easily
helpful_funny = stripped_strings[0]
recommended = stripped_strings[1]
hours = re.sub(r',',
               r'',
               stripped_strings[2].split()[0])
date_posted = stripped_strings[3][8:]
review = stripped_strings[4]
#products_in_account = stripped_strings[6].split()[0]

In [139]:
recommended


Out[139]:
'Recommended'

In [140]:
helpful = helpful_funny.split()[:9]
funny = helpful_funny.split()[9:]
found_helpful = re.sub(r',',
                       r'',
                       helpful[0])
total_helpful_candidates = re.sub(r',',
                                  r'',
                                  helpful[2])
helpful_percentage = float(found_helpful)/float(total_helpful_candidates)
print("found helpful: {}\ntotal people that could have found it helpful: {}"
      "\npercentage of people who found the review helpful: "
      "{}%".format(found_helpful,
                   total_helpful_candidates,
                   helpful_percentage))

found_funny = funny[0]
print("found review funny: {}".format(found_funny))


found helpful: 9641
total people that could have found it helpful: 10541
percentage of people who found the review helpful: 0.9146191063466464%
found review funny: 62

In [141]:
date_posted += ', 2015'

In [142]:
date_posted


Out[142]:
'February 1, 2015'

In [144]:
#products_in_account

In [150]:
# Let's define a dictionary with all of the stuff that's being collected
review_dict = dict(review_url=review_url,
                   profile_url=profile_url,
                   recommended=recommended,
                   hours=hours,
                   date_posted=date_posted,
                   review=review,
                   #products_in_account=products_in_account,
                   found_helpful=found_helpful,
                   total_found_helpful_candidates=total_helpful_candidates,
                   found_helpful_percentage=helpful_percentage,
                   found_funny=found_funny)
review_dict


Out[150]:
{'date_posted': 'February 1, 2015',
 'found_funny': '62',
 'found_helpful': '9641',
 'found_helpful_percentage': 0.9146191063466464,
 'hours': '383.4',
 'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
 'recommended': 'Recommended',
 'review': "It's like roulette; fun until it turns into Russian.",
 'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/',
 'total_found_helpful_candidates': '10541'}

In [151]:
# Now, let's go to the review link and the profile link and collect other info
review_dict['steam_id_number'] = review_dict['review_url'].split('/')[4]
review_dict['profile_url'] = 'http://steamcommunity.com/profiles/{}'.format(review_dict['steam_id_number'])
review_dict
# Note the profule url actually cannot be constructed in this way all the time:
# sometimes a shortened form of the user-name is used in place of the ID number
# AND instead of the word "profiles" "id" is used in the URL. Due to this, it is
# probably a better idea to get the profile URL directly from the link that is
# provided rather than try to construct it.


Out[151]:
{'date_posted': 'February 1, 2015',
 'found_funny': '62',
 'found_helpful': '9641',
 'found_helpful_percentage': 0.9146191063466464,
 'hours': '383.4',
 'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
 'recommended': 'Recommended',
 'review': "It's like roulette; fun until it turns into Russian.",
 'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/',
 'steam_id_number': '76561198092689293',
 'total_found_helpful_candidates': '10541'}

In [152]:
review_page = requests.get(review_dict['review_url'])
profile_page = requests.get(review_dict['profile_url'])
review_page_html = review_page.text
profile_page_html = profile_page.text
# Preprocess HTML
review_page_html = re.sub(r'\<br\>',
                          r' ',
                          review_page_html)
review_page_html = re.sub(r'[\n\t\r ]+',
                          r' ',
                          review_page_html)
review_page_html = review_page_html.strip()
profile_page_html = re.sub(r'\<br\>',
                           r' ',
                           profile_page_html)
profile_page_html = re.sub(r'[\n\t\r ]+',
                           r' ',
                           profile_page_html)
profile_page_html = profile_page_html.strip()

In [153]:
# Now use BeautifulSoup to parse the HTML
review_soup = BeautifulSoup(review_page_html, "lxml")
profile_soup = BeautifulSoup(profile_page_html, "lxml")

In [154]:
# Let's take a look first at the review page and see if there's anything there that
# can be collected
review_soup.contents


Out[154]:
['html',
 <html> <head> <title>Steam Community :: BakeACake :: Review for Counter-Strike: Global Offensive</title> <link href="http://steamcommunity-a.akamaihd.net/public/shared/css/motiva_sans.css?v=F3z3QpekjE2f" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/shared/css/buttons.css?v=4iAytERcUqWU" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/shared/css/shared_global.css?v=kbdKurnDa4EL" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/css/globalv2.css?v=G5SV2f4iL-1I" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/shared/css/motiva_sans.css?v=F3z3QpekjE2f" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/css/skin_1/workshop.css?v=1wc5rU7b03HR" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/css/skin_1/workshop_itemdetails.css?v=M2I0SXGDMTJN" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/css/skin_1/profilev2.css?v=UXEv6ZapfQTT" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/css/skin_1/profile.css?v=HzWi1wRdbzmi" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/css/skin_1/profile_games_list.css?v=-iL9RNpO2RRp" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/css/skin_1/profile_recommended.css?v=M83wjbjA_DWz" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/shared/css/user_reviews.css?v=82-uwjaMKs_C" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/css/skin_1/modalContent.css?v=.3ZY4VGdKrzFz" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/css/skin_1/header.css?v=quvm2wU5yG0p" rel="stylesheet" type="text/css"/> <script src="http://steamcommunity-a.akamaihd.net/public/javascript/prototype-1.7.js?v=.55t44gwuwgvw" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/javascript/scriptaculous/_combined.js?v=9XVsa_Ni33oN&amp;l=english&amp;load=effects,controls,slider,dragdrop" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/javascript/global.js?v=hCxPThA3-aeH&amp;l=english" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/javascript/jquery-1.11.1.min.js?v=.isFTSRckeNhC" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/shared/javascript/tooltip.js?v=.WFZ0ih1vSwzP" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/shared/javascript/shared_global.js?v=Uwx6e-JyYWxg&amp;l=english" type="text/javascript"></script> <script type="text/javascript">$J = jQuery.noConflict(); if ( typeof JSON != 'object' || !JSON.stringify || !JSON.parse ) { document.write( "<scr" + "ipt type=\"text\/javascript\" src=\"http:\/\/steamcommunity-a.akamaihd.net\/public\/javascript\/json2.js?v=pmScf4470EZP&amp;l=english\"><\/script>\n" ); }; </script><script src="http://steamcommunity-a.akamaihd.net/public/shared/javascript/user_reviews.js?v=wElGfRd1klp0&amp;l=english" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/javascript/user_reviews_community.js?v=BPCSAZJ-8wZc&amp;l=english" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/shared/javascript/dselect.js?v=OP1OqNQ9PW4e&amp;l=english" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/javascript/modalv2.js?v=HsicoS9FYYTz&amp;l=english" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/javascript/modalContent.js?v=6_oy0yOh6DLf&amp;l=english" type="text/javascript"></script> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-33779068-1']); _gaq.push(['_setSampleRate', '0.4']); _gaq.push(['_setCustomVar', 1, 'Logged In', 'false', 2]); _gaq.push(['_setCustomVar', 2, 'Client Type', 'External', 2]); _gaq.push(['_setCustomVar', 3, 'Cntrlr', 'profiles', 3]); _gaq.push(['_setCustomVar', 4, 'Method', "profiles\/recommended", 3]); _gaq.push(['_trackPageview']); _gaq.push(['_setSessionCookieTimeout', 900000]); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> </head> <script> function ReportReview() { UserReview_Report( '14446233', 'http://steamcommunity.com', function( results ) { top.location.reload(); }); } </script> <body class="flat_page migrated_profile_page"> <!-- header bar, contains info browsing user if logged in --> <div id="global_header"> <div class="content"> <div class="logo"> <span id="logo_holder"> <a href="http://store.steampowered.com/"> <img alt="Steam Logo" border="0" height="44" src="http://steamcommunity-a.akamaihd.net/public/images/header/globalheader_logo.png" width="176"/> </a> </span> <!--[if lt IE 7]> <style type="text/css"> #logo_holder img { filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0); } #logo_holder { display: inline-block; width: 176px; height: 44px; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://steamcommunity-a.akamaihd.net/public/images/header/globalheader_logo.png'); } </style> <![endif]--> </div> <div class="supernav_container"> <a class="menuitem supernav" data-tooltip-content=".submenu_store" data-tooltip-type="selector" href="http://store.steampowered.com/"> STORE </a> <div class="submenu_store" style="display: none;"> <a class="submenuitem" href="http://store.steampowered.com/">Featured</a> <a class="submenuitem" href="http://store.steampowered.com/explore/">Explore</a> <a class="submenuitem" href="http://store.steampowered.com/curators/">Curators</a> <a class="submenuitem" href="http://steamcommunity.com/my/wishlist/">Wishlist</a> <a class="submenuitem" href="http://store.steampowered.com/news/">News</a> <a class="submenuitem" href="http://store.steampowered.com/stats/">STATS</a> </div> <a class="menuitem supernav" data-tooltip-content=".submenu_community" data-tooltip-type="selector" href="http://steamcommunity.com/" style="display: block"> COMMUNITY </a> <div class="submenu_community" style="display: none;"> <a class="submenuitem" href="http://steamcommunity.com/">Home</a> <a class="submenuitem" href="http://steamcommunity.com/discussions/">DISCUSSIONS</a> <a class="submenuitem" href="http://steamcommunity.com/workshop/">Workshop</a> <a class="submenuitem" href="http://steamcommunity.com/greenlight/">Greenlight</a> <a class="submenuitem" href="http://steamcommunity.com/market/">Market</a> <a class="submenuitem" href="http://steamcommunity.com/?subsection=broadcasts">Broadcasts</a> </div> <a class="menuitem" href="http://store.steampowered.com/about/"> ABOUT </a> <a class="menuitem" href="https://help.steampowered.com/"> SUPPORT </a> </div> <script type="text/javascript"> jQuery(document).ready(function($) { $('.tooltip').v_tooltip(); $('#global_header .supernav').v_tooltip({'location':'bottom', 'tooltipClass': 'supernav_content', 'offsetY':-4, 'offsetX': 1, 'horizontalSnap': 4, 'tooltipParent': '#global_header .supernav_container', 'correctForScreenSize': false}); }); </script> <div id="global_actions"> <div id="global_action_menu"> <div class="header_installsteam_btn header_installsteam_btn_green"> <div class="header_installsteam_btn_leftcap"></div> <div class="header_installsteam_btn_rightcap"></div> <a class="header_installsteam_btn_content" href="http://store.steampowered.com/about/"> Install Steam </a> </div> <a class="global_action_link" href="https://steamcommunity.com/login/home/?goto=profiles%2F76561198092689293%2Frecommended%2F730%2F">Login</a>  |  <span class="pulldown global_action_link" id="language_pulldown" onclick="ShowMenu( this, 'language_dropdown', 'right' );">language</span> <div class="popup_block" id="language_dropdown" style="display: none;"> <div class="shadow_ul"></div><div class="shadow_top"></div><div class="shadow_ur"></div><div class="shadow_left"></div><div class="shadow_right"></div><div class="shadow_bl"></div><div class="shadow_bottom"></div><div class="shadow_br"></div> <div class="popup_body popup_menu shadow_content"> <a class="popup_menu_item tight" href="?l=bulgarian" onclick="ChangeLanguage( 'bulgarian' ); return false;">Български (Bulgarian)</a> <a class="popup_menu_item tight" href="?l=czech" onclick="ChangeLanguage( 'czech' ); return false;">čeština (Czech)</a> <a class="popup_menu_item tight" href="?l=danish" onclick="ChangeLanguage( 'danish' ); return false;">Dansk (Danish)</a> <a class="popup_menu_item tight" href="?l=dutch" onclick="ChangeLanguage( 'dutch' ); return false;">Nederlands (Dutch)</a> <a class="popup_menu_item tight" href="?l=finnish" onclick="ChangeLanguage( 'finnish' ); return false;">Suomi (Finnish)</a> <a class="popup_menu_item tight" href="?l=french" onclick="ChangeLanguage( 'french' ); return false;">Français (French)</a> <a class="popup_menu_item tight" href="?l=german" onclick="ChangeLanguage( 'german' ); return false;">Deutsch (German)</a> <a class="popup_menu_item tight" href="?l=greek" onclick="ChangeLanguage( 'greek' ); return false;">Ελληνικά (Greek)</a> <a class="popup_menu_item tight" href="?l=hungarian" onclick="ChangeLanguage( 'hungarian' ); return false;">Magyar (Hungarian)</a> <a class="popup_menu_item tight" href="?l=italian" onclick="ChangeLanguage( 'italian' ); return false;">Italiano (Italian)</a> <a class="popup_menu_item tight" href="?l=japanese" onclick="ChangeLanguage( 'japanese' ); return false;">日本語 (Japanese)</a> <a class="popup_menu_item tight" href="?l=koreana" onclick="ChangeLanguage( 'koreana' ); return false;">한국어 (Korean)</a> <a class="popup_menu_item tight" href="?l=norwegian" onclick="ChangeLanguage( 'norwegian' ); return false;">Norsk (Norwegian)</a> <a class="popup_menu_item tight" href="?l=polish" onclick="ChangeLanguage( 'polish' ); return false;">Polski (Polish)</a> <a class="popup_menu_item tight" href="?l=portuguese" onclick="ChangeLanguage( 'portuguese' ); return false;">Português (Portuguese)</a> <a class="popup_menu_item tight" href="?l=brazilian" onclick="ChangeLanguage( 'brazilian' ); return false;">Português-Brasil (Portuguese-Brazil)</a> <a class="popup_menu_item tight" href="?l=romanian" onclick="ChangeLanguage( 'romanian' ); return false;">Română (Romanian)</a> <a class="popup_menu_item tight" href="?l=russian" onclick="ChangeLanguage( 'russian' ); return false;">Русский (Russian)</a> <a class="popup_menu_item tight" href="?l=schinese" onclick="ChangeLanguage( 'schinese' ); return false;">简体中文 (Simplified Chinese)</a> <a class="popup_menu_item tight" href="?l=spanish" onclick="ChangeLanguage( 'spanish' ); return false;">Español (Spanish)</a> <a class="popup_menu_item tight" href="?l=swedish" onclick="ChangeLanguage( 'swedish' ); return false;">Svenska (Swedish)</a> <a class="popup_menu_item tight" href="?l=tchinese" onclick="ChangeLanguage( 'tchinese' ); return false;">繁體中文 (Traditional Chinese)</a> <a class="popup_menu_item tight" href="?l=thai" onclick="ChangeLanguage( 'thai' ); return false;">ไทย (Thai)</a> <a class="popup_menu_item tight" href="?l=turkish" onclick="ChangeLanguage( 'turkish' ); return false;">Türkçe (Turkish)</a> <a class="popup_menu_item tight" href="?l=ukrainian" onclick="ChangeLanguage( 'ukrainian' ); return false;">Українська (Ukrainian)</a> <a class="popup_menu_item tight" href="http://translation.steampowered.com" target="_blank">Help us translate Steam</a> </div> </div> </div> </div> </div> </div> <div id="modalBG" style="display: none"></div><script type="text/javascript"> g_sessionID = "d7657c03448607e90df2cb7b"; g_steamID = false; $J( function() { InitMiniprofileHovers(); InitEmoticonHovers(); window.BindCommunityTooltip = function( $Selector ) { $Selector.v_tooltip( {'tooltipClass': 'community_tooltip', 'dataName': 'communityTooltip' } ); }; BindCommunityTooltip( $J('[data-community-tooltip]') ); }); $J( function() { InitEconomyHovers( "http:\/\/steamcommunity-a.akamaihd.net\/public\/css\/skin_1\/economy.css?v=KhJxplnpbd14", "http:\/\/steamcommunity-a.akamaihd.net\/public\/javascript\/economy_common.js?v=1LohOdoSLPYI&l=english", "http:\/\/steamcommunity-a.akamaihd.net\/public\/javascript\/economy.js?v=9q2_OcH3X1DF&l=english" );});</script><!-- /header bar --> <div class="pagecontent no_header profile_subpage_column"> <div class="profile_small_header_bg"> <div class="profile_small_header_texture"> <a href="http://steamcommunity.com/profiles/76561198092689293"> <div class="profile_small_header_avatar"> <div class="playerAvatar medium offline"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/19/19a055c1c4c65c51eab9ba175051ef06fc3d1831_medium.jpg"/> </div> </div> </a> <div class="profile_small_header_text"> <span class="profile_small_header_name"><a class="whiteLink" href="http://steamcommunity.com/profiles/76561198092689293">BakeACake</a></span> <span class="profile_small_header_arrow">»</span> <a class="whiteLink" href="http://steamcommunity.com/profiles/76561198092689293/recommended/"><span class="profile_small_header_location">Reviews</span></a> <span class="profile_small_header_arrow">»</span> <a class="whiteLink" href="http://steamcommunity.com/profiles/76561198092689293/recommended/730"><span class="profile_small_header_location">Counter-Strike: Global Offensive</span></a> </div> </div> </div> <!-- main body --> <div class="maincontent" id="BG_bottom"> <div class="bluefade"> <div id="mainContents"> <div id="rightContents"> <div class="review_app_actions"> <div class="gameLogoHolder_default"> <a href="http://steamcommunity.com/app/730"> <img src="http://cdn.akamai.steamstatic.com/steam/apps/730/header.jpg?t=1432930508"/> </a> </div> <a class="general_btn panel_btn" href="http://store.steampowered.com/app/730"><img class="toolsIcon" src="http://steamcommunity-a.akamaihd.net/public/images//sharedfiles/icons/icon_store.png"/>View Store Page</a> <a class="general_btn panel_btn" href="http://steamcommunity.com/app/730"><img class="toolsIcon" src="http://steamcommunity-a.akamaihd.net/public/images//sharedfiles/icons/icon_community.png"/>View Community Hub</a> <a class="general_btn panel_btn" href="http://store.steampowered.com/recommended/morelike/app/730"><img class="toolsIcon" src="http://steamcommunity-a.akamaihd.net/public/images//sharedfiles/icons/icon_search.png"/>Find More Like This</a> </div> </div> <div id="leftContents"> <div class="ratingBar"> 6,220 of 6,698 people (93%) found this review helpful 128 people found this review funny </div> <div class="ratingSummaryBlock" id="ReviewTitle"> <img align="left" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1"/> <div class="ratingSummary">Recommended</div> <div class="playTime">10.4 hrs last two weeks / 160.8 hrs on record</div> <div class="recommendation_date"> Posted: Feb 13 @ 5:03am </div> </div> <br clear="all"/> <div class="review_area"> <div class="review_area_content"> <div id="ReviewText">If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins </div> <div id="ReviewEdit" style="display: none"> <textarea class="review_edit_text_area" cols="80" id="ReviewEditTextArea" maxlength="8000" rows="2">If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins </textarea> <div style="float: left"> Do you recommend this game? <span class="btn_grey_grey btn_small_thin ico_hover active" id="OwnerVoteUpBtn" onclick="SetOwnerRatingPositive();"> <span><i class="ico16 thumb_up"></i> Yes</span> </span> <span class="btn_grey_grey btn_small_thin ico_hover " id="OwnerVoteDownBtn" onclick="SetOwnerRatingNegative();"> <span><i class="ico16 thumb_down"></i>No</span> </span> </div> <div style="float: right"> <span class="btn_small_thin btn_grey_white_innerfade" onclick="Can">btn_!</span></div></div></div></div></div></div></div></div></div></body></html>]

In [305]:
review2_page = requests.get('http://steamcommunity.com/id/ernestmurdertrain/recommended/10/')
review2_page_html = review2_page.text
review2_page_html = re.sub(r'\<br\>',
                           r' ',
                           review2_page_html)
review2_page_html = review2_page_html.strip()
review2_soup = BeautifulSoup(review2_page_html, "lxml")

review3_page = requests.get('http://steamcommunity.com/id/LS1337/recommended/10/')
review3_page_html = review3_page.text
review3_page_html = re.sub(r'\<br\>',
                           r' ',
                           review3_page_html)
review3_page_html = review3_page_html.strip()
review3_soup = BeautifulSoup(review3_page_html, "lxml")

In [334]:
comment_match_1 = re.search(r'<span id="commentthread[^<]+',
                            review3_page_html)

In [335]:
comment_match_2 = re.search(r'>(\d*)$',
                            comment_match_1.group())

In [337]:
comment_match_2.groups()[0].strip()


Out[337]:
'37'

In [155]:
username_span = review_soup.find('span', 'profile_small_header_name')
review_dict['username'] = username_span.string
review_dict


Out[155]:
{'date_posted': 'February 1, 2015',
 'found_funny': '62',
 'found_helpful': '9641',
 'found_helpful_percentage': 0.9146191063466464,
 'hours': '383.4',
 'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
 'recommended': 'Recommended',
 'review': "It's like roulette; fun until it turns into Russian.",
 'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/',
 'steam_id_number': '76561198092689293',
 'total_found_helpful_candidates': '10541',
 'username': 'BakeACake'}

In [156]:
# Now let's get the number of hours the reviewer has played in the last 2 weeks
last_2_weeks_hours_div = review_soup.find('div', 'playTime')
review_dict['hours_last_2_weeks'] = re.sub(r',',
                                           r'',
                                           last_2_weeks_hours_div.string.split()[0])
review_dict


Out[156]:
{'date_posted': 'February 1, 2015',
 'found_funny': '62',
 'found_helpful': '9641',
 'found_helpful_percentage': 0.9146191063466464,
 'hours': '383.4',
 'hours_last_2_weeks': '10.4',
 'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
 'recommended': 'Recommended',
 'review': "It's like roulette; fun until it turns into Russian.",
 'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/',
 'steam_id_number': '76561198092689293',
 'total_found_helpful_candidates': '10541',
 'username': 'BakeACake'}

In [326]:
rating_summary_block_list = list(review_soup.find('div', 'ratingSummaryBlock'))
rating_summary_block_list


Out[326]:
[' ',
 <img align="left" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1"/>,
 ' ',
 <div class="ratingSummary">Recommended</div>,
 ' ',
 <div class="playTime">10.4 hrs last two weeks / 160.8 hrs on record</div>,
 ' ',
 <div class="recommendation_date"> Posted: Feb 13 @ 5:03am </div>,
 ' ']

In [329]:
rating_summary_block_list[7].string.strip()


Out[329]:
'Posted: Feb 13 @ 5:03am'

In [318]:
list(review3_soup.find('div', 'ratingSummaryBlock'))


Out[318]:
['\n',
 <img align="left" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1"/>,
 '\n',
 <div class="ratingSummary">Recommended</div>,
 '\n',
 <div class="playTime">1.3 hrs last two weeks / 7,299.2 hrs on record</div>,
 '\n',
 <div class="recommendation_date">
 						Posted: Apr 1 @ 5:07am											</div>,
 '\n']

In [309]:
SPACE = re.compile(r'[\s]+')

In [311]:
date_posted_str = SPACE.sub(' ',
                            list(review2_soup
                                 .find('div', 'ratingSummaryBlock'))[7]
                            .string
                            .strip()[8:]).split(' Updated: ')
date_posted_str


Out[311]:
['Sep 9, 2014 @ 12:32pm', 'Jun 8 @ 11:40am']

In [312]:
'Sep 9, 2014 @ 12:32pm'.split(' Updated: ')


Out[312]:
['Sep 9, 2014 @ 12:32pm']

In [317]:
list(review3_soup.find('div', 'ratingSummaryBlock'))


Out[317]:
['\n',
 <img align="left" src="http://steamcommunity-a.akamaihd.net/public/shared/images/userreviews/icon_thumbsUp.png?v=1"/>,
 '\n',
 <div class="ratingSummary">Recommended</div>,
 '\n',
 <div class="playTime">1.3 hrs last two weeks / 7,299.2 hrs on record</div>,
 '\n',
 <div class="recommendation_date">
 						Posted: Apr 1 @ 5:07am											</div>,
 '\n']

In [214]:
recommended_alternate = rating_summary_block_list[3].string
recommended_alternate


Out[214]:
'Recommended'

In [215]:
date_str = rating_summary_block_list[7].string.strip()[8:]
date_str


Out[215]:
'Feb 13 @ 5:03am'

In [313]:
date, time = tuple([x.strip() for x in date_str.split('@')])

In [314]:
time = time.upper()
time


Out[314]:
'5:03AM'

In [218]:
date


Out[218]:
'Feb 13'

In [219]:
time = '{} {}'.format(time[:-2],
                      time[-2:])
time


Out[219]:
'5:03 AM'

In [220]:
date_posted = '{}, {}'.format(date,
                              time)
date_posted


Out[220]:
'Feb 13, 5:03 AM'

In [221]:
hours_str = rating_summary_block_list[5].string
hours_str


Out[221]:
'10.4 hrs last two weeks / 160.8 hrs on record'

In [222]:
(hours_last_two_weeks_str,
 hours_total_str) = tuple([x.strip() for x
                           in hours_str.split('/')])
hours_last_two_weeks_str


Out[222]:
'10.4 hrs last two weeks'

In [223]:
hours_total_str


Out[223]:
'160.8 hrs on record'

In [284]:
comment_count_str = re.search(r'<span id="commentthread[^<]+',
                              review_page_html)

In [285]:
comment_count_str = re.search(r'>(\d*)$',
                              comment_count_str.group())
comment_count_str.groups()[0]


Out[285]:
'32'

In [35]:
# Note: We could try to collect the comment text, but it's a little complicated
# due to the fact that comments could stretch across multiple pages (10 per page)
# We will just save this for a later time since it's unclear if this data would
# be useful, anyway.

In [36]:
# Now let's try to look at the profile page and collect data from there

In [286]:
profile_soup.contents


Out[286]:
['html',
 <html class=""> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/> <title>Steam Community :: BakeACake</title> <link href="/favicon.ico" rel="shortcut icon" type="image/x-icon"/> <link href="http://steamcommunity-a.akamaihd.net/public/shared/css/motiva_sans.css?v=F3z3QpekjE2f" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/shared/css/buttons.css?v=4iAytERcUqWU" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/shared/css/shared_global.css?v=kbdKurnDa4EL" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/css/globalv2.css?v=G5SV2f4iL-1I" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/css/skin_1/modalContent.css?v=.3ZY4VGdKrzFz" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/css/skin_1/profilev2.css?v=UXEv6ZapfQTT" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/shared/css/motiva_sans.css?v=F3z3QpekjE2f" rel="stylesheet" type="text/css"/> <link href="http://steamcommunity-a.akamaihd.net/public/css/skin_1/header.css?v=quvm2wU5yG0p" rel="stylesheet" type="text/css"/> <script src="http://steamcommunity-a.akamaihd.net/public/javascript/prototype-1.7.js?v=.55t44gwuwgvw" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/javascript/scriptaculous/_combined.js?v=9XVsa_Ni33oN&amp;l=english&amp;load=effects,controls,slider,dragdrop" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/javascript/global.js?v=hCxPThA3-aeH&amp;l=english" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/javascript/jquery-1.11.1.min.js?v=.isFTSRckeNhC" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/shared/javascript/tooltip.js?v=.WFZ0ih1vSwzP" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/shared/javascript/shared_global.js?v=Uwx6e-JyYWxg&amp;l=english" type="text/javascript"></script> <script type="text/javascript">$J = jQuery.noConflict(); if ( typeof JSON != 'object' || !JSON.stringify || !JSON.parse ) { document.write( "<scr" + "ipt type=\"text\/javascript\" src=\"http:\/\/steamcommunity-a.akamaihd.net\/public\/javascript\/json2.js?v=pmScf4470EZP&amp;l=english\"><\/script>\n" ); }; </script><script src="http://steamcommunity-a.akamaihd.net/public/javascript/modalContent.js?v=6_oy0yOh6DLf&amp;l=english" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/javascript/modalv2.js?v=HsicoS9FYYTz&amp;l=english" type="text/javascript"></script> <script src="http://steamcommunity-a.akamaihd.net/public/javascript/profile.js?v=zFbO_D12dW8I&amp;l=english" type="text/javascript"></script> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-33779068-1']); _gaq.push(['_setSampleRate', '0.4']); _gaq.push(['_setCustomVar', 1, 'Logged In', 'false', 2]); _gaq.push(['_setCustomVar', 2, 'Client Type', 'External', 2]); _gaq.push(['_setCustomVar', 3, 'Cntrlr', 'profiles', 3]); _gaq.push(['_setCustomVar', 4, 'Method', "profiles\/DefaultAction", 3]); _gaq.push(['_trackPageview']); _gaq.push(['_setSessionCookieTimeout', 900000]); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> </head> <body class="flat_page profile_page "> <div class="responsive_page_frame"> <div class="responsive_page_content"> <div id="global_header"> <div class="content"> <div class="logo"> <span id="logo_holder"> <a href="http://store.steampowered.com/"> <img alt="Steam Logo" border="0" height="44" src="http://steamcommunity-a.akamaihd.net/public/images/header/globalheader_logo.png" width="176"/> </a> </span> <!--[if lt IE 7]> <style type="text/css"> #logo_holder img { filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0); } #logo_holder { display: inline-block; width: 176px; height: 44px; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://steamcommunity-a.akamaihd.net/public/images/header/globalheader_logo.png'); } </style> <![endif]--> </div> <div class="supernav_container"> <a class="menuitem supernav" data-tooltip-content=".submenu_store" data-tooltip-type="selector" href="http://store.steampowered.com/"> STORE </a> <div class="submenu_store" style="display: none;"> <a class="submenuitem" href="http://store.steampowered.com/">Featured</a> <a class="submenuitem" href="http://store.steampowered.com/explore/">Explore</a> <a class="submenuitem" href="http://store.steampowered.com/curators/">Curators</a> <a class="submenuitem" href="http://steamcommunity.com/my/wishlist/">Wishlist</a> <a class="submenuitem" href="http://store.steampowered.com/news/">News</a> <a class="submenuitem" href="http://store.steampowered.com/stats/">STATS</a> </div> <a class="menuitem supernav" data-tooltip-content=".submenu_community" data-tooltip-type="selector" href="http://steamcommunity.com/" style="display: block"> COMMUNITY </a> <div class="submenu_community" style="display: none;"> <a class="submenuitem" href="http://steamcommunity.com/">Home</a> <a class="submenuitem" href="http://steamcommunity.com/discussions/">DISCUSSIONS</a> <a class="submenuitem" href="http://steamcommunity.com/workshop/">Workshop</a> <a class="submenuitem" href="http://steamcommunity.com/greenlight/">Greenlight</a> <a class="submenuitem" href="http://steamcommunity.com/market/">Market</a> <a class="submenuitem" href="http://steamcommunity.com/?subsection=broadcasts">Broadcasts</a> </div> <a class="menuitem" href="http://store.steampowered.com/about/"> ABOUT </a> <a class="menuitem" href="https://help.steampowered.com/"> SUPPORT </a> </div> <script type="text/javascript"> jQuery(document).ready(function($) { $('.tooltip').v_tooltip(); $('#global_header .supernav').v_tooltip({'location':'bottom', 'tooltipClass': 'supernav_content', 'offsetY':-4, 'offsetX': 1, 'horizontalSnap': 4, 'tooltipParent': '#global_header .supernav_container', 'correctForScreenSize': false}); }); </script> <div id="global_actions"> <div id="global_action_menu"> <div class="header_installsteam_btn header_installsteam_btn_green"> <div class="header_installsteam_btn_leftcap"></div> <div class="header_installsteam_btn_rightcap"></div> <a class="header_installsteam_btn_content" href="http://store.steampowered.com/about/"> Install Steam </a> </div> <a class="global_action_link" href="https://steamcommunity.com/login/home/?goto=profiles%2F76561198092689293">Login</a>  |  <span class="pulldown global_action_link" id="language_pulldown" onclick="ShowMenu( this, 'language_dropdown', 'right' );">language</span> <div class="popup_block" id="language_dropdown" style="display: none;"> <div class="shadow_ul"></div><div class="shadow_top"></div><div class="shadow_ur"></div><div class="shadow_left"></div><div class="shadow_right"></div><div class="shadow_bl"></div><div class="shadow_bottom"></div><div class="shadow_br"></div> <div class="popup_body popup_menu shadow_content"> <a class="popup_menu_item tight" href="?l=bulgarian" onclick="ChangeLanguage( 'bulgarian' ); return false;">Български (Bulgarian)</a> <a class="popup_menu_item tight" href="?l=czech" onclick="ChangeLanguage( 'czech' ); return false;">čeština (Czech)</a> <a class="popup_menu_item tight" href="?l=danish" onclick="ChangeLanguage( 'danish' ); return false;">Dansk (Danish)</a> <a class="popup_menu_item tight" href="?l=dutch" onclick="ChangeLanguage( 'dutch' ); return false;">Nederlands (Dutch)</a> <a class="popup_menu_item tight" href="?l=finnish" onclick="ChangeLanguage( 'finnish' ); return false;">Suomi (Finnish)</a> <a class="popup_menu_item tight" href="?l=french" onclick="ChangeLanguage( 'french' ); return false;">Français (French)</a> <a class="popup_menu_item tight" href="?l=german" onclick="ChangeLanguage( 'german' ); return false;">Deutsch (German)</a> <a class="popup_menu_item tight" href="?l=greek" onclick="ChangeLanguage( 'greek' ); return false;">Ελληνικά (Greek)</a> <a class="popup_menu_item tight" href="?l=hungarian" onclick="ChangeLanguage( 'hungarian' ); return false;">Magyar (Hungarian)</a> <a class="popup_menu_item tight" href="?l=italian" onclick="ChangeLanguage( 'italian' ); return false;">Italiano (Italian)</a> <a class="popup_menu_item tight" href="?l=japanese" onclick="ChangeLanguage( 'japanese' ); return false;">日本語 (Japanese)</a> <a class="popup_menu_item tight" href="?l=koreana" onclick="ChangeLanguage( 'koreana' ); return false;">한국어 (Korean)</a> <a class="popup_menu_item tight" href="?l=norwegian" onclick="ChangeLanguage( 'norwegian' ); return false;">Norsk (Norwegian)</a> <a class="popup_menu_item tight" href="?l=polish" onclick="ChangeLanguage( 'polish' ); return false;">Polski (Polish)</a> <a class="popup_menu_item tight" href="?l=portuguese" onclick="ChangeLanguage( 'portuguese' ); return false;">Português (Portuguese)</a> <a class="popup_menu_item tight" href="?l=brazilian" onclick="ChangeLanguage( 'brazilian' ); return false;">Português-Brasil (Portuguese-Brazil)</a> <a class="popup_menu_item tight" href="?l=romanian" onclick="ChangeLanguage( 'romanian' ); return false;">Română (Romanian)</a> <a class="popup_menu_item tight" href="?l=russian" onclick="ChangeLanguage( 'russian' ); return false;">Русский (Russian)</a> <a class="popup_menu_item tight" href="?l=schinese" onclick="ChangeLanguage( 'schinese' ); return false;">简体中文 (Simplified Chinese)</a> <a class="popup_menu_item tight" href="?l=spanish" onclick="ChangeLanguage( 'spanish' ); return false;">Español (Spanish)</a> <a class="popup_menu_item tight" href="?l=swedish" onclick="ChangeLanguage( 'swedish' ); return false;">Svenska (Swedish)</a> <a class="popup_menu_item tight" href="?l=tchinese" onclick="ChangeLanguage( 'tchinese' ); return false;">繁體中文 (Traditional Chinese)</a> <a class="popup_menu_item tight" href="?l=thai" onclick="ChangeLanguage( 'thai' ); return false;">ไทย (Thai)</a> <a class="popup_menu_item tight" href="?l=turkish" onclick="ChangeLanguage( 'turkish' ); return false;">Türkçe (Turkish)</a> <a class="popup_menu_item tight" href="?l=ukrainian" onclick="ChangeLanguage( 'ukrainian' ); return false;">Українська (Ukrainian)</a> <a class="popup_menu_item tight" href="http://translation.steampowered.com" target="_blank">Help us translate Steam</a> </div> </div> </div> </div> </div> </div> <div id="modalBG" style="display: none"></div><script type="text/javascript"> g_sessionID = "596cd71d715ef8256137a902"; g_steamID = false; $J( function() { InitMiniprofileHovers(); InitEmoticonHovers(); window.BindCommunityTooltip = function( $Selector ) { $Selector.v_tooltip( {'tooltipClass': 'community_tooltip', 'dataName': 'communityTooltip' } ); }; BindCommunityTooltip( $J('[data-community-tooltip]') ); }); $J( function() { InitEconomyHovers( "http:\/\/steamcommunity-a.akamaihd.net\/public\/css\/skin_1\/economy.css?v=KhJxplnpbd14", "http:\/\/steamcommunity-a.akamaihd.net\/public\/javascript\/economy_common.js?v=1LohOdoSLPYI&l=english", "http:\/\/steamcommunity-a.akamaihd.net\/public\/javascript\/economy.js?v=9q2_OcH3X1DF&l=english" );});</script> <div class="responsive_page_legacy_content"> <script type="text/javascript"> g_rgProfileData = {"url":"http:\/\/steamcommunity.com\/profiles\/76561198092689293\/","steamid":"76561198092689293","personaname":"BakeACake","summary":"I don't hate you probably\r "}; </script> <div class="no_header profile_page has_profile_background " style="background-image: url( 'http://cdn.akamai.steamstatic.com/steamcommunity/public/images/items/237740/5c553a2a47dbe0b7ac3e23ef94ff1db31adeccca.jpg' );"> <div class="profile_header_bg"> <div class="profile_header_bg_texture"> <div class="profile_header"> <div class="profile_header_content"> <div class="playerAvatar profile_header_size offline"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/19/19a055c1c4c65c51eab9ba175051ef06fc3d1831_full.jpg"/> </div> <div class="profile_header_badgeinfo"> <a href="http://steamcommunity.com/profiles/76561198092689293/badges"> <div class="persona_name persona_level">Level <div class="friendPlayerLevel lvl_0"><span class="friendPlayerLevelNum">5</span></div></div> </a> <div class="profile_header_badge"> <div class="favorite_badge"> <div class="favorite_badge_icon" data-community-tooltip="Adept Accumulator 22 games owned"> <a class="whiteLink" href="http://steamcommunity.com/profiles/76561198092689293/badges/13"> <img src="http://steamcommunity-a.akamaihd.net/public/images/badges/13_gamecollector/10.png"/> </a> </div> <div class="favorite_badge_description"> <div class="name"><a class="whiteLink" href="http://steamcommunity.com/profiles/76561198092689293/badges/13">Adept Accumulator</a></div> <div class="xp">190 XP</div> </div> </div> </div> <div class="profile_header_actions"> </div> </div> <div class="profile_header_summary"> <div class="persona_name" style="font-size: 24px;"> <span class="actual_persona_name">BakeACake</span> <span class="namehistory_link" onclick="ShowAliasPopup( this );"> <img border="0" height="5" id="getnamehistory_arrow" src="http://steamcommunity-a.akamaihd.net/public/images/skin_1/arrowDn9x5.gif" width="9"/> </span> <div class="popup_block_new" id="NamePopup" style="display: none;"> <div class="popup_body popup_menu"> <div>This user has also played as:</div> <div id="NamePopupAliases"> </div> </div> </div> </div> <div class="header_real_name ellipsis"> <bdi>tom barrick</bdi>   <img class="profile_flag" src="http://steamcommunity-a.akamaihd.net/public/images/countryflags/gb.gif"/> United Kingdom (Great Britain) </div> <div class="profile_summary"> I don't hate you probably </div> <div class="profile_summary_footer"> <span class="whiteLink">View more info</span> </div> <script type="text/javascript"> $J( function() { InitProfileSummary( g_rgProfileData['summary'] ); } ); </script> </div> </div> </div> </div> </div> <div class="profile_content has_profile_background"> <div class="profile_background_holder_content"> <div class="profile_background_overlay_content"></div> <div class="profile_background_image_content " style="background-image: url(http://cdn.akamai.steamstatic.com/steamcommunity/public/images/items/237740/5c553a2a47dbe0b7ac3e23ef94ff1db31adeccca.jpg);"> </div> </div> <div class="profile_content_inner"> <div class="profile_leftcol"> <div class="profile_recentgame_header profile_leftcol_header"> <div class="recentgame_quicklinks"> <h2>50.5 hours past 2 weeks</h2> </div> <h2>Recent Activity</h2> </div> <div class="recent_games"> <div class="recent_game"> <div class="recent_game_content"> <div class="game_info"> <div class="game_info_cap"><a href="http://steamcommunity.com/app/440"><img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/440/07385eb55b5ba974aebbe74d3c99626bda7920b8.jpg"/></a></div> <div class="game_info_details"> 838 hrs on record last played on Jul 8 </div> <div class="game_name"><a class="whiteLink" href="http://steamcommunity.com/app/440">Team Fortress 2</a></div> </div> <div class="game_info_stats"> <div class="game_info_achievements_badge"> <div class="game_info_achievements"> <span class="game_info_achievement_summary"> <a class="whiteLink" href="http://steamcommunity.com/profiles/76561198092689293/stats/440/achievements/">Achievement Progress</a>   306 of 518 </span> <div class="achievement_progress_bar_ctn"> <div class="progress_bar" style="width: 59%;"> </div> </div> <div class="achievement_icons"> <div class="game_info_achievement" data-community-tooltip="The Man from P.U.N.C.T.U.R.E."> <a href="http://steamcommunity.com/profiles/76561198092689293/stats/440/achievements/"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/440/edcc5222ced3c693c04931baca22f2001bb220a4.jpg"/> </a> </div> <div class="game_info_achievement" data-community-tooltip="Agent Provocateur"> <a href="http://steamcommunity.com/profiles/76561198092689293/stats/440/achievements/"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/440/fc4b66d3bacee79dc04fff92fb9255667c1b3705.jpg"/> </a> </div> <div class="game_info_achievement" data-community-tooltip="Loch Ness Bombster"> <a href="http://steamcommunity.com/profiles/76561198092689293/stats/440/achievements/"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/440/62ca5007d50ef77dc837a4c4cef4a4e26c1aa67c.jpg"/> </a> </div> <div class="game_info_achievement" data-community-tooltip="The Argyle Sap"> <a href="http://steamcommunity.com/profiles/76561198092689293/stats/440/achievements/"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/440/b057986361e03acf4fb3a8e68044838d6530bf85.jpg"/> </a> </div> <div class="game_info_achievement" data-community-tooltip="Spynal Tap"> <a href="http://steamcommunity.com/profiles/76561198092689293/stats/440/achievements/"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/440/0b3ba2bf77357ba0c89b7b916f56b38e1beeb8eb.jpg"/> </a> </div> <div class="game_info_achievement plus_more" onclick="window.location='http://steamcommunity.com/profiles/76561198092689293/stats/440/achievements/'"> +301 </div> </div> </div> <!-- only badge, no achievements --> <div class="game_info_badge_border"> <div class="game_info_badge"> <div class="game_info_badge_icon"> <a href="http://steamcommunity.com/profiles/76561198092689293/gamecards/440"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/items/440/f97b77ef286a9df54b15049b180793ba4a3dab98.png"/> </a> </div> <div class="game_info_badge_description"> <div class="name"><a class="whiteLink" href="http://steamcommunity.com/profiles/76561198092689293/gamecards/440">Sawmill Strongmann</a></div> <div class="xp">100 XP</div> </div> </div> </div> <div style="clear: right;"></div> </div> <div class="game_info_stats_rule"></div> <div class="game_info_stats_publishedfilecounts"> <span class="published_file_count_ctn"> <span class="published_file_icon screenshot"></span> <a class="published_file_link" href="http://steamcommunity.com/profiles/76561198092689293/screenshots/?appid=440">Screenshots 12</a> </span> <span class="published_file_count_ctn"> <span class="published_file_icon recommendation"></span> <a class="published_file_link" href="http://steamcommunity.com/profiles/76561198092689293/recommended/440/">Review 1</a> </span> </div> </div> </div> </div> <div class="recent_game"> <div class="recent_game_content"> <div class="game_info"> <div class="game_info_cap"><a href="http://steamcommunity.com/app/301520"><img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/301520/b672917eda349139e968fe8c53cd99d668b56f38.jpg"/></a></div> <div class="game_info_details"> 42 hrs on record last played on Jul 8 </div> <div class="game_name"><a class="whiteLink" href="http://steamcommunity.com/app/301520">Robocraft</a></div> </div> <div class="game_info_stats"> <div class="game_info_stats_publishedfilecounts"> <span class="published_file_count_ctn"> <span class="published_file_icon screenshot"></span> <a class="published_file_link" href="http://steamcommunity.com/profiles/76561198092689293/screenshots/?appid=301520">Screenshots 4</a> </span> </div> </div> </div> </div> <div class="recent_game"> <div class="recent_game_content"> <div class="game_info"> <div class="game_info_cap"><a href="http://steamcommunity.com/app/218620"><img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/218620/4467a70648f49a6b309b41b81b4531f9a20ed99d.jpg"/></a></div> <div class="game_info_details"> 126 hrs on record last played on Jul 8 </div> <div class="game_name"><a class="whiteLink" href="http://steamcommunity.com/app/218620">PAYDAY 2</a></div> </div> <div class="game_info_stats"> <div class="game_info_achievements_only_ctn"> <div class="game_info_achievements"> <span class="game_info_achievement_summary"> <a class="whiteLink" href="http://steamcommunity.com/profiles/76561198092689293/stats/218620/achievements/">Achievement Progress</a>   78 of 329 </span> <div class="achievement_progress_bar_ctn"> <div class="progress_bar" style="width: 23%;"> </div> </div> <div class="achievement_icons"> <div class="game_info_achievement" data-community-tooltip="Build Me an Army Worthy of Crime.net"> <a href="http://steamcommunity.com/profiles/76561198092689293/stats/218620/achievements/"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/218620/34146a80dccd3551bf7ba68fbba6e9ad48b923ea.jpg"/> </a> </div> <div class="game_info_achievement" data-community-tooltip="Becoming Infamous"> <a href="http://steamcommunity.com/profiles/76561198092689293/stats/218620/achievements/"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/218620/e4c2dbfa2170e8c415c4af875ab0ec5ff54633b1.jpg"/> </a> </div> <div class="game_info_achievement" data-community-tooltip="Yes Hello, I’d Like to Make a De-paws-it "> <a href="http://steamcommunity.com/profiles/76561198092689293/stats/218620/achievements/"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/218620/42ec406b4381ff3f65cd25841359d1347913e157.jpg"/> </a> </div> <div class="game_info_achievement" data-community-tooltip="A Vote for Change"> <a href="http://steamcommunity.com/profiles/76561198092689293/stats/218620/achievements/"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/218620/660f1ea9d10ff8d0748d6bd7749ad78a50fea747.jpg"/> </a> </div> <div class="game_info_achievement" data-community-tooltip="Tough As Diamonds"> <a href="http://steamcommunity.com/profiles/76561198092689293/stats/218620/achievements/"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/218620/70caef5b0c2ed46e9bec9c7a8a4656f6dd1e4844.jpg"/> </a> </div> <div class="game_info_achievement plus_more" onclick="window.location='http://steamcommunity.com/profiles/76561198092689293/stats/218620/achievements/'"> +73 </div> </div> </div> <div style="clear: right;"></div> </div> <div class="game_info_stats_rule"></div> <div class="game_info_stats_publishedfilecounts"> <span class="published_file_count_ctn"> <span class="published_file_icon screenshot"></span> <a class="published_file_link" href="http://steamcommunity.com/profiles/76561198092689293/screenshots/?appid=218620">Screenshots 14</a> </span> </div> </div> </div> </div> </div> <div> <div class="recentgame_quicklinks"> View <a class="whiteLink" href="http://steamcommunity.com/profiles/76561198092689293/games/">All Recently Played</a> | <a class="whiteLink" href="http://steamcommunity.com/profiles/76561198092689293/wishlist/">Wishlist</a> | <a class="whiteLink" href="http://steamcommunity.com/profiles/76561198092689293/recommended/">Reviews</a> </div> <div style="clear: right;"></div> </div> <div class="profile_comment_area"> <script type="text/javascript"> $J( function() { InitializeCommentThread( "Profile", "Profile_76561198092689293_0", {"feature":"-1","feature2":0,"owner":"76561198092689293","total_count":5,"start":0,"pagesize":6,"has_upvoted":0,"upvotes":0,"votecountid":null,"voteupid":null,"commentcountid":null,"subscribed":false}, 'http://steamcommunity.com/comment/Profile/', 40 ); } ); </script> <div class="commentthread_area" id="commentthread_Profile_76561198092689293_0_area"> <div class="commentthread_header"> <div class="commentthread_count"> <span class="commentthread_header_label">Comments</span> </div> <div class="commentthread_paging" id="commentthread_Profile_76561198092689293_0_pagecontrols"> <span class="pagebtn" id="commentthread_Profile_76561198092689293_0_pagebtn_prev">&lt;</span> <span class="commentthread_pagelinks" id="commentthread_Profile_76561198092689293_0_pagelinks"></span> <span class="commentthread_pagedropdown" id="commentthread_Profile_76561198092689293_0_pagedropdown"></span> <span class="pagebtn" id="commentthread_Profile_76561198092689293_0_pagebtn_next">&gt;</span> </div> <div style="clear: both;"></div> </div> <!-- 21 --> <div class="commentthread_comment_container" id="commentthread_Profile_76561198092689293_0_postcontainer"> <div class="commentthread_comments" id="commentthread_Profile_76561198092689293_0_posts"> <div class="commentthread_comment responsive_body_text " id="comment_617329797180338663" style=""> <div class="commentthread_comment_avatar playerAvatar responsive_enlarge offline"> <a data-miniprofile="132423565" href="http://steamcommunity.com/profiles/76561198092689293"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/19/19a055c1c4c65c51eab9ba175051ef06fc3d1831.jpg" srcset="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/19/19a055c1c4c65c51eab9ba175051ef06fc3d1831.jpg 1x, http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/19/19a055c1c4c65c51eab9ba175051ef06fc3d1831_medium.jpg 2x"/> </a> </div> <div class="commentthread_comment_content"> <div class="commentthread_comment_author"> <a class="hoverunderline commentthread_author_link" data-miniprofile="132423565" href="http://steamcommunity.com/profiles/76561198092689293"> <bdi>BakeACake</bdi></a> <span class="commentthread_comment_timestamp"> Mar 6 @ 11:28am  </span> </div> <div class="commentthread_comment_text" id="comment_content_617329797180338663"> Thankyou </div> </div> </div> <div class="commentthread_comment responsive_body_text " id="comment_617329797180337671" style=""> <div class="commentthread_comment_avatar playerAvatar responsive_enlarge offline"> <a data-miniprofile="105526676" href="http://steamcommunity.com/profiles/76561198065792404"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/47/47433739f4fd1cc1375dda3f73a49028c57837b1.jpg" srcset="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/47/47433739f4fd1cc1375dda3f73a49028c57837b1.jpg 1x, http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/47/47433739f4fd1cc1375dda3f73a49028c57837b1_medium.jpg 2x"/> </a> </div> <div class="commentthread_comment_content"> <div class="commentthread_comment_author"> <a class="hoverunderline commentthread_author_link" data-miniprofile="105526676" href="http://steamcommunity.com/profiles/76561198065792404"> <bdi>Simple</bdi></a> <span class="commentthread_comment_timestamp"> Mar 6 @ 11:28am  </span> </div> <div class="commentthread_comment_text" id="comment_content_617329797180337671"> You taste nice </div> </div> </div> <div class="commentthread_comment responsive_body_text " id="comment_619569341119745711" style=""> <div class="commentthread_comment_avatar playerAvatar responsive_enlarge offline"> <a data-miniprofile="108723068" href="http://steamcommunity.com/profiles/76561198068988796"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/ec/eca67b9aa8f001bf7fd7fc99c32f92d45fabd0b3.jpg" srcset="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/ec/eca67b9aa8f001bf7fd7fc99c32f92d45fabd0b3.jpg 1x, http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/ec/eca67b9aa8f001bf7fd7fc99c32f92d45fabd0b3_medium.jpg 2x"/> </a> </div> <div class="commentthread_comment_content"> <div class="commentthread_comment_author"> <a class="hoverunderline commentthread_author_link" data-miniprofile="108723068" href="http://steamcommunity.com/profiles/76561198068988796"> <bdi>Strength2000</bdi></a> <span class="commentthread_comment_timestamp"> Oct 24, 2014 @ 6:26am  </span> </div> <div class="commentthread_comment_text" id="comment_content_619569341119745711"> +Rep thanks for quick and pleseant transaction! </div> </div> </div> <div class="commentthread_comment responsive_body_text " id="comment_46476691937674905" style=""> <div class="commentthread_comment_avatar playerAvatar responsive_enlarge offline"> <a data-miniprofile="135432678" href="http://steamcommunity.com/id/L4ZZ4R1N1"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/f4/f4f13937a5ec90eda6509ad9d1a0d5dd459eba02.jpg" srcset="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/f4/f4f13937a5ec90eda6509ad9d1a0d5dd459eba02.jpg 1x, http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/f4/f4f13937a5ec90eda6509ad9d1a0d5dd459eba02_medium.jpg 2x"/> </a> </div> <div class="commentthread_comment_content"> <div class="commentthread_comment_author"> <a class="hoverunderline commentthread_author_link" data-miniprofile="135432678" href="http://steamcommunity.com/id/L4ZZ4R1N1"> <bdi>Mundy</bdi></a> <span class="commentthread_comment_timestamp"> Jul 15, 2014 @ 1:36pm  </span> </div> <div class="commentthread_comment_text" id="comment_content_46476691937674905"> +Rep, polite, helpful and nice trader ! </div> </div> </div> <div class="commentthread_comment responsive_body_text " id="comment_558749191039044006" style=""> <div class="commentthread_comment_avatar playerAvatar responsive_enlarge offline"> <a data-miniprofile="106663956" href="http://steamcommunity.com/id/WintersOP"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/8e/8e238f3d246b4096c972610c69c3e497da13af31.jpg" srcset="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/8e/8e238f3d246b4096c972610c69c3e497da13af31.jpg 1x, http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/8e/8e238f3d246b4096c972610c69c3e497da13af31_medium.jpg 2x"/> </a> </div> <div class="commentthread_comment_content"> <div class="commentthread_comment_author"> <a class="hoverunderline commentthread_author_link" data-miniprofile="106663956" href="http://steamcommunity.com/id/WintersOP"> <bdi>[TeamPornHub]adolfo</bdi></a> <span class="commentthread_comment_timestamp"> Mar 1, 2014 @ 3:08pm  </span> </div> <div class="commentthread_comment_text" id="comment_content_558749191039044006"> +rep </div> </div> </div> </div> </div> <div class="commentthread_footer"> <div class="commentthread_paging" id="commentthread_Profile_76561198092689293_0_fpagecontrols"> <span class="pagebtn" id="commentthread_Profile_76561198092689293_0_fpagebtn_prev">&lt;</span> <span class="commentthread_pagelinks" id="commentthread_Profile_76561198092689293_0_fpagelinks"></span> <span class="commentthread_pagedropdown" id="commentthread_Profile_76561198092689293_0_fpagedropdown"></span> <span class="pagebtn" id="commentthread_Profile_76561198092689293_0_fpagebtn_next">&gt;</span> </div> <div style="clear: both;"></div> </div> </div> </div> </div> <div class="profile_rightcol responsive_local_menu"> <div class="profile_in_game persona offline"> <div class="profile_in_game_header">Currently Offline</div> <div class="profile_in_game_name">Last Online 9 hrs, 1 mins ago</div> </div> <div class="profile_badges"> <div class="profile_count_link"> <a class="count_link_label" href="http://steamcommunity.com/profiles/76561198092689293/badges/">Badges  <span class="profile_count_link_total"> 4 </span> </a> </div> <div class="profile_badges_badge " data-community-tooltip="Years of Service Member since May 29, 2013."> <a href="http://steamcommunity.com/profiles/76561198092689293/badges/1"> <img src="http://steamcommunity-a.akamaihd.net/public/images/badges/02_years/steamyears202_54.png"/> </a> </div> <div class="profile_badges_badge " data-community-tooltip="Community Ambassador Completed all Community tasks"> <a href="http://steamcommunity.com/profiles/76561198092689293/badges/2"> <img src="http://steamcommunity-a.akamaihd.net/public/images/badges/01_community/community03_54.png"/> </a> </div> <div class="profile_badges_badge " data-community-tooltip="Sawmill Strongmann Level 1 Team Fortress 2 Badge"> <a href="http://steamcommunity.com/profiles/76561198092689293/gamecards/440"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/items/440/f97b77ef286a9df54b15049b180793ba4a3dab98.png"/> </a> </div> <div class="profile_badges_badge last" data-community-tooltip="Adept Accumulator 22 games owned"> <a href="http://steamcommunity.com/profiles/76561198092689293/badges/13"> <img src="http://steamcommunity-a.akamaihd.net/public/images/badges/13_gamecollector/10.png"/> </a> </div> <div style="clear: left;"></div> </div> <div class="profile_item_links"> <div class="profile_count_link"> <a class="count_link_label" href="http://steamcommunity.com/profiles/76561198092689293/games/?tab=all">Games  <span class="profile_count_link_total"> 22 </span> </a> </div> <div class="profile_count_link"> <a class="count_link_label" href="http://steamcommunity.com/profiles/76561198092689293/screenshots/">Screenshots  <span class="profile_count_link_total"> 115 </span> </a> </div> <div class="profile_count_link"> <a class="count_link_label" href="http://steamcommunity.com/profiles/76561198092689293/recommended/">Reviews  <span class="profile_count_link_total"> 3 </span> </a> </div> <div class="profile_count_link"> <a class="count_link_label" href="http://steamcommunity.com/profiles/76561198092689293/inventory/">Inventory  <span class="profile_count_link_total">   <!-- so the line spaces like the rest --> </span> </a> </div> </div> <div class="profile_group_links"> <div class="profile_count_link"> <a class="count_link_label" href="http://steamcommunity.com/profiles/76561198092689293/groups/">Groups  <span class="profile_count_link_total"> 22 </span> </a> </div> <div class="profile_group profile_primary_group"> <div class="profile_group_avatar"> <a href="http://steamcommunity.com/groups/allhailgaben1"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/08/083fb97177df38c34720316035e1710bf1ad88d0_medium.jpg"/> </a> </div> <a class="whiteLink" href="http://steamcommunity.com/groups/allhailgaben1"> Hail GabeN! </a> 7 Members <div style="clear: left;"></div> </div> <div class="profile_group"> <div class="profile_group_avatar"> <a href="http://steamcommunity.com/groups/gaben"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/b9/b976c1b30cfb094204590dd1810e7d4a9fbf114e.jpg"/> </a> </div> <a class="whiteLink" href="http://steamcommunity.com/groups/gaben"> Gaben </a> 8,637 Members <div style="clear: left;"></div> </div> <div class="profile_group"> <div class="profile_group_avatar"> <a href="http://steamcommunity.com/groups/UGCLeague"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/7e/7ea5bde6e1d5ed5add685c8ef224cf0b1fb1fc7e.jpg"/> </a> </div> <a class="whiteLink" href="http://steamcommunity.com/groups/UGCLeague"> United Gaming Clans </a> 31,881 Members <div style="clear: left;"></div> </div> </div> <div class="profile_friend_links"> <div class="profile_count_link"> <a class="count_link_label" href="http://steamcommunity.com/profiles/76561198092689293/friends/">Friends  <span class="profile_count_link_total"> 71 </span> </a> </div> <div class="profile_topfriends"> <div class="friendBlock persona online" data-miniprofile="85958756"> <a class="friendBlockLinkOverlay" href="http://steamcommunity.com/id/mickelsnickel"></a> <div class="friendPlayerLevel lvl_80"> <span class="friendPlayerLevelNum">87</span> </div> <div class="playerAvatar responsive_enlarge online"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/91/9158feaadf19b159ba3e9cccf4d15de322ae853e_medium.jpg"/> </div> <div class="friendBlockContent"> MickelSnickel <span class="friendSmallText"> Online </span> </div> </div> <div class="friendBlock persona offline" data-miniprofile="212541198"> <a class="friendBlockLinkOverlay" href="http://steamcommunity.com/id/oCryonix"></a> <div class="friendPlayerLevel lvl_30"> <span class="friendPlayerLevelNum">32</span> </div> <div class="playerAvatar responsive_enlarge offline"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/45/45c4d64cb04436f460066eb6a2253a8c5a56510d_medium.jpg"/> </div> <div class="friendBlockContent"> ✪ Cryonix <span class="friendSmallText"> Last Online 17 hrs, 43 mins ago </span> </div> </div> <div class="friendBlock persona offline" data-miniprofile="60248307"> <a class="friendBlockLinkOverlay" href="http://steamcommunity.com/id/Birdstronaut"></a> <div class="friendPlayerLevel lvl_20"> <span class="friendPlayerLevelNum">27</span> </div> <div class="playerAvatar responsive_enlarge offline"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/51/51d7478beac3baeacbea599a278b03271fb82860_medium.jpg"/> </div> <div class="friendBlockContent"> Wolf <span class="friendSmallText"> Last Online 11 hrs, 20 mins ago </span> </div> </div> <div class="friendBlock persona offline" data-miniprofile="110633761"> <a class="friendBlockLinkOverlay" href="http://steamcommunity.com/profiles/76561198070899489"></a> <div class="friendPlayerLevel lvl_20"> <span class="friendPlayerLevelNum">20</span> </div> <div class="playerAvatar responsive_enlarge offline"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/e8/e8f12ff4b152cfd616502124b4ea5a0dc25cd824_medium.jpg"/> </div> <div class="friendBlockContent"> Vultrex <span class="friendSmallText"> Last Online 7 hrs, 45 mins ago </span> </div> </div> <div class="friendBlock persona offline" data-miniprofile="105526676"> <a class="friendBlockLinkOverlay" href="http://steamcommunity.com/profiles/76561198065792404"></a> <div class="friendPlayerLevel lvl_20"> <span class="friendPlayerLevelNum">20</span> </div> <div class="playerAvatar responsive_enlarge offline"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/47/47433739f4fd1cc1375dda3f73a49028c57837b1_medium.jpg"/> </div> <div class="friendBlockContent"> Simple <span class="friendSmallText"> Last Online 8 hrs, 49 mins ago </span> </div> </div> <div class="friendBlock persona offline" data-miniprofile="96947904"> <a class="friendBlockLinkOverlay" href="http://steamcommunity.com/profiles/76561198057213632"></a> <div class="friendPlayerLevel lvl_10"> <span class="friendPlayerLevelNum">18</span> </div> <div class="playerAvatar responsive_enlarge offline"> <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/d4/d42064115e09f58fe43a0e33e4d4402e0bd356f0_medium.jpg"/> </div> <div class="friendBlockContent"> Mystificator ☁☁☁ <span class="friendSmallText"> Last Online 7 hrs, 13 mins ago </span> </div> </div> </div> </div> </div> <div style="clear: both;"></div> </div> </div> </div> </div> <!-- responsive_page_legacy_content --> <div id="footer_spacer"></div> <div id="footer"> <div class="footer_content"> <span id="footerLogo"><img alt="Valve Logo" border="0" height="26" src="http://steamcommunity-a.akamaihd.net/public/images/skin_1/footerLogo_valve.png?v=1" width="96"/></span> <span id="footerText"> © Valve Corporation. All rights reserved. All trademarks are property of their respective owners in the US and other countries.<br/>Some geospatial data on this website is provided by <a href="https://steamcommunity.com/linkfilter/?url=http://www.geonames.org" target="_blank">geonames.org</a>. <span class="valve_links"> <a href="http://store.steampowered.com/privacy_agreement/" target="_blank">Privacy Policy</a>   |  <a href="http://www.valvesoftware.com/legal.htm" target="_blank">Legal</a>  |  <a href="http://store.steampowered.com/subscriber_agreement/" target="_blank">Steam Subscriber Agreement</a> </span> </span> </div> </div> </div> <!-- responsive_page_content --> </div> <!-- responsive_page_frame --> </body> </html>]

In [287]:
# First, we can get the player's "level" (not exactly sure what the level pertains
# to, but we'll try to find out later)
review_dict['friend_player_level'] = profile_soup.find('div', 'friendPlayerLevel').string
review_dict


Out[287]:
{'date_posted': 'February 1, 2015',
 'found_funny': '62',
 'found_helpful': '9641',
 'found_helpful_percentage': 0.9146191063466464,
 'friend_player_level': '5',
 'hours': '383.4',
 'hours_last_2_weeks': '10.4',
 'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
 'recommended': 'Recommended',
 'review': "It's like roulette; fun until it turns into Russian.",
 'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/',
 'steam_id_number': '76561198092689293',
 'total_found_helpful_candidates': '10541',
 'username': 'BakeACake'}

In [288]:
# Let's collect the game achievements summary data
achievements_string_split = list(profile_soup.find('span',
                                                   'game_info_achievement_summary').stripped_strings)[1].split()
review_dict['achievement_progress'] = dict(achievements=achievements_string_split[0],
                                           total_achievements_possible=achievements_string_split[2])
review_dict


Out[288]:
{'achievement_progress': {'achievements': '306',
  'total_achievements_possible': '518'},
 'date_posted': 'February 1, 2015',
 'found_funny': '62',
 'found_helpful': '9641',
 'found_helpful_percentage': 0.9146191063466464,
 'friend_player_level': '5',
 'hours': '383.4',
 'hours_last_2_weeks': '10.4',
 'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
 'recommended': 'Recommended',
 'review': "It's like roulette; fun until it turns into Russian.",
 'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/',
 'steam_id_number': '76561198092689293',
 'total_found_helpful_candidates': '10541',
 'username': 'BakeACake'}

In [40]:
# We can also collect the total number of badges the player has
review_dict['num_badges'] = list(profile_soup.find('div', 'profile_badges').stripped_strings)[1]
review_dict


Out[40]:
{'achievement_progress': {'achievements': '88',
  'total_achievements_possible': '167'},
 'date_posted': 'February 13, 2015',
 'found_funny': '242',
 'found_helpful': '5163',
 'found_helpful_percentage': 0.9302702702702703,
 'friend_player_level': '5',
 'hours': '151.9',
 'hours_last_2_weeks': '44.3',
 'num_badges': '4',
 'num_comments': '27',
 'products_in_account': '20',
 'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
 'recommended': 'Recommended',
 'review': "If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins",
 'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/?insideModal=1',
 'steam_id_number': '76561198092689293',
 'total_found_helpful_candidates': '5550',
 'username': 'BakeACake'}

In [295]:
items = list(profile_soup.find('div', 'profile_item_links').stripped_strings)
items


Out[295]:
['Games', '22', 'Screenshots', '115', 'Reviews', '3', 'Inventory']

In [296]:
# Other review had the following profile_item_links stripped strings value, which
# has a very different look to it
profile_item_links = ['Games', '49', 'Workshop Items', '3', 'Reviews', '2', 'Guides', '2', 'Inventory']

In [116]:
# So, we will have to come up with a different way of dealing with the values, like
# this:
iter_items = iter(profile_item_links)
dict(zip(iter_items,
         iter_items))


Out[116]:
{'Games': '49', 'Guides': '2', 'Reviews': '2', 'Workshop Items': '3'}

In [297]:
# Let's also collect the total number of reviews and screenshots (total number of
# games is also available, but it is the same as that stored under the
# products_in_account key)
profile_counts = list(profile_soup.find('div', 'profile_item_links').stripped_strings)
review_dict['num_screenshots'] = profile_counts[3]
review_dict['num_reviews'] = profile_counts[5]
review_dict


Out[297]:
{'achievement_progress': {'achievements': '306',
  'total_achievements_possible': '518'},
 'date_posted': 'February 1, 2015',
 'found_funny': '62',
 'found_helpful': '9641',
 'found_helpful_percentage': 0.9146191063466464,
 'friend_player_level': '5',
 'hours': '383.4',
 'hours_last_2_weeks': '10.4',
 'num_reviews': '3',
 'num_screenshots': '115',
 'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
 'recommended': 'Recommended',
 'review': "It's like roulette; fun until it turns into Russian.",
 'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/',
 'steam_id_number': '76561198092689293',
 'total_found_helpful_candidates': '10541',
 'username': 'BakeACake'}

In [298]:
# Finally, let's get the number of groups the reviewer is a member of and the
# number of friends the reviewer has on Steam
group_counts = list(profile_soup.find('div', 'profile_group_links').stripped_strings)
review_dict['num_groups'] = group_counts[1]
review_dict


Out[298]:
{'achievement_progress': {'achievements': '306',
  'total_achievements_possible': '518'},
 'date_posted': 'February 1, 2015',
 'found_funny': '62',
 'found_helpful': '9641',
 'found_helpful_percentage': 0.9146191063466464,
 'friend_player_level': '5',
 'hours': '383.4',
 'hours_last_2_weeks': '10.4',
 'num_groups': '22',
 'num_reviews': '3',
 'num_screenshots': '115',
 'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
 'recommended': 'Recommended',
 'review': "It's like roulette; fun until it turns into Russian.",
 'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/',
 'steam_id_number': '76561198092689293',
 'total_found_helpful_candidates': '10541',
 'username': 'BakeACake'}

In [299]:
friend_counts = list(profile_soup.find('div', 'profile_friend_links').stripped_strings)
review_dict['num_friends'] = friend_counts[1]
review_dict


Out[299]:
{'achievement_progress': {'achievements': '306',
  'total_achievements_possible': '518'},
 'date_posted': 'February 1, 2015',
 'found_funny': '62',
 'found_helpful': '9641',
 'found_helpful_percentage': 0.9146191063466464,
 'friend_player_level': '5',
 'hours': '383.4',
 'hours_last_2_weeks': '10.4',
 'num_friends': '71',
 'num_groups': '22',
 'num_reviews': '3',
 'num_screenshots': '115',
 'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
 'recommended': 'Recommended',
 'review': "It's like roulette; fun until it turns into Russian.",
 'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/',
 'steam_id_number': '76561198092689293',
 'total_found_helpful_candidates': '10541',
 'username': 'BakeACake'}

In [300]:
import sys
try:
    profile_soup.find('div', 'profile_friend_links').stripped_strings
    int("t")
except (AttributeError,
        ValueError) as e:
    print(e)


invalid literal for int() with base 10: 't'

In [44]:
# Now that we have figured out a way to collect a lot of data, let's create a
# function that will automatically create dictionaries like the one above

In [45]:
# Will need to make use of the UnicodeDammit method in teh bs4
# (BeautifulSoup) because some of the reviews/HTML source contains
# text in a non-ascii encoding
# I won't get too much into this, just know that it's often an issue and
# that we can deal with it by trying a to decode a text with a lot of
# different encoding and then re-encode it to ascii
# We will also be making use of the sys module, which is part of the
# standard library
# One other module we will need to make use of is the time module, another
# standard library module that allows us to make a program wait for a bit
# before moving on, which I'll talk about it in a minute
# These are the codecs that we will try to decode the HTML with. I'm
# probably going a little overboard, but I like to be exhaustive
codecs = ["windows-1252", "utf8", "ascii", "cp500", "cp850", "cp852",
          "cp858", "cp1140", "cp1250", "iso-8859-1", "iso8859_2",
          "iso8859_15", "iso8859_16", "mac_roman", "mac_latin2", "utf32",
          "utf16"]

In [46]:
# Imports
import re
import sys
import time
import requests
from bs4 import (BeautifulSoup,
                 UnicodeDammit)

# Define a couple useful regular expressions
SPACE = re.compile(r'[\s]+')
BREAKS_REGEX = re.compile(r'\<br\>')
COMMA = re.compile(r',')

# Codecs for use with UnicodeDammit
codecs = ["windows-1252", "utf8", "ascii", "cp500", "cp850", "cp852",
          "cp858", "cp1140", "cp1250", "iso-8859-1", "iso8859_2",
          "iso8859_15", "iso8859_16", "mac_roman", "mac_latin2", "utf32",
          "utf16"]

def get_review_data_for_game(appid, time_out=0.5, limit=0, sleep=10):
    '''
    Generate dictionaries for each review for a given game.

    The dictionaries will contain keys for the review text, the reviewer ID,
    the reviewer's user-name, the number of friends the reviewer has, the
    the number of reviews the reviewer has written, and much more.

    :param appid: ID corresponding to a given game
    :type appid: str
    :param timeout: amount of time allowed to go by without hearing
                    response while using requests.get() method
    :type timeout: float
    :param limit: the maximum number of reviews to collect
    :type limit: int (default: 0, which signifies all)
    :param sleep: amount of time to wait between reading different pages on
                  Steam
    :type sleep: int/float
    :yields: dictionary with keys for various pieces of data related to a
             single review, including the review itself, the number of hours
             the reviewer has played the game, etc.
    '''

    if limit == 0:
        limit = -1
    range_begin = 0
    i = 1
    reviews_count = 0
    while True:
        # Get unique URL for values of range_begin and i
        base_url = 'http://steamcommunity.com/app/{2}/homecontent/?user' \
                   'reviewsoffset={0}&p=1&itemspage={1}&screenshotspage' \
                   '={1}&videospage={1}&artpage={1}&allguidepage={1}&web' \
                   'guidepage={1}&integratedguidepage={1}&discussionspage' \
                   '={1}&appid={2}&appHubSubSection=10&appHubSubSection=' \
                   '10&l=english&browsefilter=toprated&filterLanguage=' \
                   'default&searchText=&forceanon=1'.format(range_begin,
                                                            i,
                                                            appid)
        # Get the URL content
        base_page = None
        time.sleep(sleep)
        # Get the HTML page; if there's a timeout error, then catch it and
        # exit out of the loop, effectively ending the function.
        try:
            base_page = requests.get(base_url,
                                     timeout=time_out)
        except requests.exceptions.Timeout as e:
            print("There was a Timeout error...")
            break
        # If there's nothing at this URL, page might have no value at all,
        # in which case we should break out of the loop
        # Another situation where we'd want to exit from the loop is if the
        # page.text contains only an empty string or a string that has only
        # a sequence of one or more spaces
        if not base_page:
            break
        elif not base_page.text.strip():
            break
        # Preprocess the HTML source, getting rid of "<br>" tags and
        # replacing any sequence of one or more carriage returns or
        # whitespace characters with a single space
        base_html = SPACE.sub(r' ',
                              BREAKS_REGEX.sub(r' ',
                                               base_page.text.strip()))
        # Try to decode the HTML to unicode and then re-encode the text
        # with ASCII, ignoring any characters that can't be represented
        # with ASCII
        base_html = UnicodeDammit(base_html,
                                  codecs).unicode_markup.encode('ascii',
                                                                'ignore')

        # Parse the source HTML with BeautifulSoup
        source_soup = BeautifulSoup(base_html,
                                    'lxml')
        reviews = soup.find_all('div',
                                'apphub_Card interactable')

        # Iterate over the reviews in the source HTML and find data for
        # each review, yielding a dictionary
        for review in reviews:

            # Get links to review URL, profile URL, Steam ID number
            review_url = review.attrs['onclick'].split(' ',
                                                       2)[1].strip("',")
            review_url_split = review_url.split('/')
            steam_id_number = review_url_split[4]
            profile_url = '/'.join(review_url_split[:5])

            # Get other data within the base reviews page
            stripped_strings = list(review.stripped_strings)
            # Parsing the HTML in this way depends on stripped_strings
            # having a length of at least 8
            if len(stripped_strings) >= 8:
                print(stripped_strings)
                # Extracting data from the text that supplies the number
                # of users who found the review helpful and/or funny
                # depends on a couple facts
                helpful_and_funny_list = stripped_strings[0].split()
                if (helpful_and_funny_list[8] == 'helpful'
                    and len(helpful_and_funny_list) == 15):
                    helpful = helpful_and_funny_list[:9]
                    funny = helpful_and_funny_list[9:]
                    num_found_helpful = int(COMMA.sub(r'',
                                                  helpful[0]))
                    num_voted_helpfulness = int(COMMA.sub(r'',
                                                          helpful[2]))
                    num_found_unhelpful = \
                        num_voted_helpfulness - num_found_helpful
                    found_helpful_percentage = \
                        float(num_found_helpful)/num_voted_helpfulness
                    num_found_funny = funny[0]
                recommended = stripped_strings[1]
                total_game_hours = COMMA.sub(r'',
                                             stripped_strings[2]
                                             .split()[0])
                date_posted = '{}, 2015'.format(stripped_strings[3][8:])
                review_text = ' '.join(stripped_strings[4:-3])
                num_games_owned = stripped_strings[-2].split()[0]
            else:
                sys.stderr.write('Found incorrect number of '
                                 '"stripped_strings" in review HTML '
                                 'element. stripped_strings: {}\n'
                                 'Continuing.'
                                 .format(stripped_strings))
                continue

            # Make dictionary for holding all the data related to the
            # review
            review_dict = \
                dict(review_url=review_url,
                     recommended=recommended,
                     total_game_hours=total_game_hours,
                     date_posted=date_posted,
                     review=review_text,
                     num_games_owned=num_games_owned,
                     num_found_helpful=num_found_helpful,
                     num_found_unhelpful=num_found_unhelpful,
                     num_voted_helpfulness=num_voted_helpfulness,
                     found_helpful_percentage=found_helpful_percentage,
                     num_found_funny=num_found_funny,
                     steam_id_number=steam_id_number,
                     profile_url=profile_url)

            # Follow links to profile and review pages and collect data
            # from there
            time.sleep(sleep)
            review_page = requests.get(review_dict['review_url'])
            time.sleep(sleep)
            profile_page = requests.get(review_dict['profile_url'])
            review_page_html = review_page.text
            profile_page_html = profile_page.text

            # Preprocess HTML and try to decode the HTML to unicode and
            # then re-encode the text with ASCII, ignoring any characters
            # that can't be represented with ASCII
            review_page_html = \
                SPACE.sub(r' ',
                          BREAKS_REGEX.sub(r' ',
                                           review_page_html.strip()))
            review_page_html = \
                UnicodeDammit(review_page_html,
                              codecs).unicode_markup.encode('ascii',
                                                            'ignore')
            profile_page_html = \
                SPACE.sub(r' ',
                          BREAKS_REGEX.sub(r' ',
                                           profile_page_html.strip()))
            profile_page_html = \
                UnicodeDammit(profile_page_html,
                              codecs).unicode_markup.encode('ascii',
                                                            'ignore')

            # Now use BeautifulSoup to parse the HTML
            review_soup = BeautifulSoup(review_page_html,
                                        'lxml')
            profile_soup = BeautifulSoup(profile_page_html,
                                         'lxml')

            # Get the user-name from the review page
            review_dict['username'] = \
                review_soup.find('span',
                                 'profile_small_header_name').string

            # Get the number of hours the reviewer played the game in the
            # last 2 weeks
            review_dict['hours_previous_2_weeks'] = \
                COMMA.sub(r'',
                          review_soup.find('div',
                                           'playTime').string.split()[0])

            # Get the number of comments users made on the review (if any)
            review_dict['num_comments'] = \
                COMMA.sub(r'',
                          list(review_soup
                               .find('div',
                                     'commentthread_count')
                               .strings)[1])

            # Get the reviewer's "level" (friend player level)
            friend_player_level = profile_soup.find('div',
                                                    'friendPlayerLevel')
            if friend_player_level:
                review_dict['friend_player_level'] = \
                    friend_player_level.string
            else:
                review_dict['friend_player_level'] = None

            # Get the game achievements summary data
            achievements = \
                profile_soup.find('span',
                                  'game_info_achievement_summary')
            if achievements:
                achievements = achievements.stripped_strings
                if achievements:
                    achievements = list(achievements)[1].split()
                    review_dict['achievement_progress'] = \
                        dict(num_achievements_attained=achievements[0],
                             num_achievements_possible=achievements[2])
                else:
                    review_dict['achievement_progress'] = \
                        dict(num_achievements_attained=None,
                             num_achievements_possible=None)
            else:
                review_dict['achievement_progress'] = \
                    dict(num_achievements_attained=None,
                         num_achievements_possible=None)

            # Get the number of badges the reviewer has earned on the site
            badges = profile_soup.find('div',
                                       'profile_badges')
            if badges:
                badges = badges.stripped_strings
                if badges:
                    review_dict['num_badges'] = list(badges)[1]
                else:
                    review_dict['num_badges'] = None
            else:
                review_dict['num_badges'] = None

            # Get the number of reviews the reviewer has written across all
            # games and the number of screenshots he/she has taken
            reviews_screens = profile_soup.find('div',
                                                'profile_item_links')
            if reviews_screens:
                reviews_screens = reviews_screens.stripped_strings
                if reviews_screens:
                    reviews_screens = list(reviews_screens)
                    review_dict['num_screenshots'] = reviews_screens[3]
                    review_dict['num_reviews'] = reviews_screens[5]
                else:
                    review_dict['num_screenshots'] = None
                    review_dict['num_reviews'] = None
            else:
                review_dict['num_screenshots'] = None
                review_dict['num_reviews'] = None

            # Get the number of groups the reviewer is part of on the site
            groups = profile_soup.find('div',
                                       'profile_group_links')
            if groups:
                groups = groups.stripped_strings
                if groups:
                    review_dict['num_groups'] = list(groups)[1]
                else:
                    review_dict['num_groups'] = None
            else:
                review_dict['num_groups'] = None

            # Get the number of friends the reviwer has on the site
            friends = profile_soup.find('div',
                                        'profile_friend_links')
            if friends:
                friends = friends.stripped_strings
                if friends:
                    review_dict['num_friends'] = list(friends)[1]
                else:
                    review_dict['num_friends'] = None
            else:
                review_dict['num_friends'] = None

            yield review_dict

            reviews_count += 1
            if reviews_count == limit:
                break

        if reviews_count == limit:
            break

        # Increment the range_begin and i variables, which will be used in
        # the generation of the next page of reviews
        range_begin += 10
        i += 1

In [47]:
# Alright, let's see if that worked
# We'll create an empty set of reviews and as each new set of reviews is
# generated by the function, we'll add in all of the reviews in the set
# to the set of reviews (if any are duplicates, they will not be added)
reviews = [review for review in get_review_data_for_game('730',
                                                         time_out=3.0,
                                                         limit=33)]


['5,163 of 5,550 people (93%) found this review helpful 242 people found this review funny', 'Recommended', '151.9 hrs on record', 'Posted: February 13', "If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins", 'BakeACake', '20 products in account', '27']
['8,925 of 9,744 people (92%) found this review helpful 145 people found this review funny', 'Recommended', '341.3 hrs on record', 'Posted: February 1', "It's like roulette; fun until it turns into Russian.", 'Delta', '124 products in account', '69']
['15,517 of 17,300 people (90%) found this review helpful 1 person found this review funny', 'Recommended', '1,176.1 hrs on record', 'Posted: February 27, 2014', 'you either die a noob or live long enough to get called a hacker', 'compliKATIEd', '114 products in account', '174']
['3,571 of 3,956 people (90%) found this review helpful 42 people found this review funny', 'Recommended', '554.6 hrs on record', 'Posted: January 14', 'Your self-esteem either dies in this game or it inflates to unbearable proportions.', 'Knalraap', '390 products in account', '27']
['19,679 of 22,004 people (89%) found this review helpful 1 person found this review funny', 'Recommended', '723.8 hrs on record', 'Posted: July 13, 2014', 'Kill someone with a P90 - "You\'re a fuc**** noob!! Noob weapon!!" Kill someone with a P90 through a smoke - "You\'re a fuc**** hacker!!" Kill someone with a AWP - "You\'re a fuc**** noob!! Noob weapon!!" Kill someone with a AWP through a door - "You\'re a fuc**** hacker!!" In a 1 vs 5 you die - "You\'re a fuc**** noob!!" In a 1 vs 5 you win - "You\'re a fuc**** hacker!!" Kill someone with a headshot - "Hacker!!" Get headshoted by someone - "Owned!!" and get teabagged Kill someone with a grenade - "Luck!!" Get killed by someone with a grenade - "AHAHAHAHA" Get teamkilled by someone - "Get out of the way you fuc**** idiot!!" Accidentally teamkill someone - "You\'re a fuc**** idiot!!" Blocked by someone - Dies Accidentally blocks someone - "Get out the way you fuc**** idiot!!" Decide to save - "You\'re a fuc**** coward!!" Decide not to save - "Save you fuc**** idiot!!" Kill someone while defending the bomb - "You fuc**** camper!!" Kill someone while defending the hostages - "You fuc**** camper!!" Someone dies - The deceased one starts to rage Your team lose the round - Your team starts to rage Your team is losing 10-2 - Someone rages quit Go to the balcony in Italy - "You fuc**** hacker!!" Worst guy receives a drop - "Are you fuc**** serious!?" Warm up - Everybody tries to spawn kill Score is 5-1 in your favor - "This is a T map!" Score is 1-5 againts you - "This is a CT map!" Lose the first 2 rounds - Someone asks to get kicked Last round - Everybody buys Negev Your team is loosinh and you are in last - Someone vote kicks you Win a match - All enemy team rages Lose a match - Yout team rages Someone\'s Internet crashes - 30 minutes ban Your Internet crashes - 7 days ban 10/10 Best rage simulator out there!', 'Fokogrilo', '219 products in account', '519']
['10,344 of 11,556 people (90%) found this review helpful 3 people found this review funny', 'Recommended', '82.0 hrs on record', 'Posted: September 1, 2014', 'Bought this game, played online, learned fluent russian 2 weeks later.', 'Mr. Palliman', '59 products in account', '132']
['8,158 of 9,148 people (89%) found this review helpful 139 people found this review funny', 'Recommended', '424.8 hrs on record', 'Posted: January 24', '>see a guy >shoot him >miss every shot >he turns around >kills me in one shot >exit cs:go 10/10', 'Zooma', '9 products in account', '81']
['7,863 of 8,842 people (89%) found this review helpful 295 people found this review funny', 'Recommended', '3,415.4 hrs on record', 'Posted: March 17', 'Revan was only 23 years old. He loved CS:GO so much. He had most of the achievements and items. He prayed to Gaben every night before bed, thanking him for the inventory he\'s been given. "CS:GO is love," he says, "CS:GO is life." His elder Dragon hears him and calls him a silver scrublord. He knows his elder is just jealous of his son\'s devotion to Gabe. He calls him a console peasant. He slaps him and sends him to sleep. He\'s crying now and his face hurts. He lays in bed, and it\'s really cold. He feels a warmth moving towards him. He looks up. It\'s Gabe! He\'s so happy, Gabe whispers into Revan\'s ear, "Try your chances... Open a case." Gaben grabs Revan with his powerful dev-team hands and puts him on his hands and knees. He\'s ready. Revan opens his pockets for Gabe. Gabe puts his hands deep into Revan\'s pockets. It costs so much, but Revan does it for CS:GO. Revan can feel his wallet emptying as his eyes start to water. He accepts the terms and conditions. Revan wants to please Gabe. Gaben lets out a mighty roar as he fills Revan\'s computer with keys. Revan opens all the cases and gets nothing worth anything at all.', 'CS:GO is love... CS:GO is life... \ufeff', '¤Revan The Anthro Dragon¤', '181 products in account', '179']
['5,066 of 5,692 people (89%) found this review helpful 2 people found this review funny', 'Recommended', '296.2 hrs on record', 'Posted: December 14, 2014', 'Knife = free Knife with paint on it = 200$', 'Sir Grayson', '152 products in account', '29']
['11,568 of 13,088 people (88%) found this review helpful 1 person found this review funny', 'Recommended', '953.3 hrs on record', 'Posted: November 1, 2014', 'Knife in real life: 10$ Knife in game: 400$ 10/10', 'Enderborn', '162 products in account', '114']
['5,163 of 5,550 people (93%) found this review helpful 242 people found this review funny', 'Recommended', '151.9 hrs on record', 'Posted: February 13', "If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins", 'BakeACake', '20 products in account', '27']
['8,925 of 9,744 people (92%) found this review helpful 145 people found this review funny', 'Recommended', '341.3 hrs on record', 'Posted: February 1', "It's like roulette; fun until it turns into Russian.", 'Delta', '124 products in account', '69']
['15,517 of 17,300 people (90%) found this review helpful 1 person found this review funny', 'Recommended', '1,176.1 hrs on record', 'Posted: February 27, 2014', 'you either die a noob or live long enough to get called a hacker', 'compliKATIEd', '114 products in account', '174']
['3,571 of 3,956 people (90%) found this review helpful 42 people found this review funny', 'Recommended', '554.6 hrs on record', 'Posted: January 14', 'Your self-esteem either dies in this game or it inflates to unbearable proportions.', 'Knalraap', '390 products in account', '27']
['19,679 of 22,004 people (89%) found this review helpful 1 person found this review funny', 'Recommended', '723.8 hrs on record', 'Posted: July 13, 2014', 'Kill someone with a P90 - "You\'re a fuc**** noob!! Noob weapon!!" Kill someone with a P90 through a smoke - "You\'re a fuc**** hacker!!" Kill someone with a AWP - "You\'re a fuc**** noob!! Noob weapon!!" Kill someone with a AWP through a door - "You\'re a fuc**** hacker!!" In a 1 vs 5 you die - "You\'re a fuc**** noob!!" In a 1 vs 5 you win - "You\'re a fuc**** hacker!!" Kill someone with a headshot - "Hacker!!" Get headshoted by someone - "Owned!!" and get teabagged Kill someone with a grenade - "Luck!!" Get killed by someone with a grenade - "AHAHAHAHA" Get teamkilled by someone - "Get out of the way you fuc**** idiot!!" Accidentally teamkill someone - "You\'re a fuc**** idiot!!" Blocked by someone - Dies Accidentally blocks someone - "Get out the way you fuc**** idiot!!" Decide to save - "You\'re a fuc**** coward!!" Decide not to save - "Save you fuc**** idiot!!" Kill someone while defending the bomb - "You fuc**** camper!!" Kill someone while defending the hostages - "You fuc**** camper!!" Someone dies - The deceased one starts to rage Your team lose the round - Your team starts to rage Your team is losing 10-2 - Someone rages quit Go to the balcony in Italy - "You fuc**** hacker!!" Worst guy receives a drop - "Are you fuc**** serious!?" Warm up - Everybody tries to spawn kill Score is 5-1 in your favor - "This is a T map!" Score is 1-5 againts you - "This is a CT map!" Lose the first 2 rounds - Someone asks to get kicked Last round - Everybody buys Negev Your team is loosinh and you are in last - Someone vote kicks you Win a match - All enemy team rages Lose a match - Yout team rages Someone\'s Internet crashes - 30 minutes ban Your Internet crashes - 7 days ban 10/10 Best rage simulator out there!', 'Fokogrilo', '219 products in account', '519']
['10,344 of 11,556 people (90%) found this review helpful 3 people found this review funny', 'Recommended', '82.0 hrs on record', 'Posted: September 1, 2014', 'Bought this game, played online, learned fluent russian 2 weeks later.', 'Mr. Palliman', '59 products in account', '132']
['8,158 of 9,148 people (89%) found this review helpful 139 people found this review funny', 'Recommended', '424.8 hrs on record', 'Posted: January 24', '>see a guy >shoot him >miss every shot >he turns around >kills me in one shot >exit cs:go 10/10', 'Zooma', '9 products in account', '81']
['7,863 of 8,842 people (89%) found this review helpful 295 people found this review funny', 'Recommended', '3,415.4 hrs on record', 'Posted: March 17', 'Revan was only 23 years old. He loved CS:GO so much. He had most of the achievements and items. He prayed to Gaben every night before bed, thanking him for the inventory he\'s been given. "CS:GO is love," he says, "CS:GO is life." His elder Dragon hears him and calls him a silver scrublord. He knows his elder is just jealous of his son\'s devotion to Gabe. He calls him a console peasant. He slaps him and sends him to sleep. He\'s crying now and his face hurts. He lays in bed, and it\'s really cold. He feels a warmth moving towards him. He looks up. It\'s Gabe! He\'s so happy, Gabe whispers into Revan\'s ear, "Try your chances... Open a case." Gaben grabs Revan with his powerful dev-team hands and puts him on his hands and knees. He\'s ready. Revan opens his pockets for Gabe. Gabe puts his hands deep into Revan\'s pockets. It costs so much, but Revan does it for CS:GO. Revan can feel his wallet emptying as his eyes start to water. He accepts the terms and conditions. Revan wants to please Gabe. Gaben lets out a mighty roar as he fills Revan\'s computer with keys. Revan opens all the cases and gets nothing worth anything at all.', 'CS:GO is love... CS:GO is life... \ufeff', '¤Revan The Anthro Dragon¤', '181 products in account', '179']
['5,066 of 5,692 people (89%) found this review helpful 2 people found this review funny', 'Recommended', '296.2 hrs on record', 'Posted: December 14, 2014', 'Knife = free Knife with paint on it = 200$', 'Sir Grayson', '152 products in account', '29']
['11,568 of 13,088 people (88%) found this review helpful 1 person found this review funny', 'Recommended', '953.3 hrs on record', 'Posted: November 1, 2014', 'Knife in real life: 10$ Knife in game: 400$ 10/10', 'Enderborn', '162 products in account', '114']
['5,163 of 5,550 people (93%) found this review helpful 242 people found this review funny', 'Recommended', '151.9 hrs on record', 'Posted: February 13', "If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins", 'BakeACake', '20 products in account', '27']
['8,925 of 9,744 people (92%) found this review helpful 145 people found this review funny', 'Recommended', '341.3 hrs on record', 'Posted: February 1', "It's like roulette; fun until it turns into Russian.", 'Delta', '124 products in account', '69']
['15,517 of 17,300 people (90%) found this review helpful 1 person found this review funny', 'Recommended', '1,176.1 hrs on record', 'Posted: February 27, 2014', 'you either die a noob or live long enough to get called a hacker', 'compliKATIEd', '114 products in account', '174']
['3,571 of 3,956 people (90%) found this review helpful 42 people found this review funny', 'Recommended', '554.6 hrs on record', 'Posted: January 14', 'Your self-esteem either dies in this game or it inflates to unbearable proportions.', 'Knalraap', '390 products in account', '27']
['19,679 of 22,004 people (89%) found this review helpful 1 person found this review funny', 'Recommended', '723.8 hrs on record', 'Posted: July 13, 2014', 'Kill someone with a P90 - "You\'re a fuc**** noob!! Noob weapon!!" Kill someone with a P90 through a smoke - "You\'re a fuc**** hacker!!" Kill someone with a AWP - "You\'re a fuc**** noob!! Noob weapon!!" Kill someone with a AWP through a door - "You\'re a fuc**** hacker!!" In a 1 vs 5 you die - "You\'re a fuc**** noob!!" In a 1 vs 5 you win - "You\'re a fuc**** hacker!!" Kill someone with a headshot - "Hacker!!" Get headshoted by someone - "Owned!!" and get teabagged Kill someone with a grenade - "Luck!!" Get killed by someone with a grenade - "AHAHAHAHA" Get teamkilled by someone - "Get out of the way you fuc**** idiot!!" Accidentally teamkill someone - "You\'re a fuc**** idiot!!" Blocked by someone - Dies Accidentally blocks someone - "Get out the way you fuc**** idiot!!" Decide to save - "You\'re a fuc**** coward!!" Decide not to save - "Save you fuc**** idiot!!" Kill someone while defending the bomb - "You fuc**** camper!!" Kill someone while defending the hostages - "You fuc**** camper!!" Someone dies - The deceased one starts to rage Your team lose the round - Your team starts to rage Your team is losing 10-2 - Someone rages quit Go to the balcony in Italy - "You fuc**** hacker!!" Worst guy receives a drop - "Are you fuc**** serious!?" Warm up - Everybody tries to spawn kill Score is 5-1 in your favor - "This is a T map!" Score is 1-5 againts you - "This is a CT map!" Lose the first 2 rounds - Someone asks to get kicked Last round - Everybody buys Negev Your team is loosinh and you are in last - Someone vote kicks you Win a match - All enemy team rages Lose a match - Yout team rages Someone\'s Internet crashes - 30 minutes ban Your Internet crashes - 7 days ban 10/10 Best rage simulator out there!', 'Fokogrilo', '219 products in account', '519']
['10,344 of 11,556 people (90%) found this review helpful 3 people found this review funny', 'Recommended', '82.0 hrs on record', 'Posted: September 1, 2014', 'Bought this game, played online, learned fluent russian 2 weeks later.', 'Mr. Palliman', '59 products in account', '132']
['8,158 of 9,148 people (89%) found this review helpful 139 people found this review funny', 'Recommended', '424.8 hrs on record', 'Posted: January 24', '>see a guy >shoot him >miss every shot >he turns around >kills me in one shot >exit cs:go 10/10', 'Zooma', '9 products in account', '81']
['7,863 of 8,842 people (89%) found this review helpful 295 people found this review funny', 'Recommended', '3,415.4 hrs on record', 'Posted: March 17', 'Revan was only 23 years old. He loved CS:GO so much. He had most of the achievements and items. He prayed to Gaben every night before bed, thanking him for the inventory he\'s been given. "CS:GO is love," he says, "CS:GO is life." His elder Dragon hears him and calls him a silver scrublord. He knows his elder is just jealous of his son\'s devotion to Gabe. He calls him a console peasant. He slaps him and sends him to sleep. He\'s crying now and his face hurts. He lays in bed, and it\'s really cold. He feels a warmth moving towards him. He looks up. It\'s Gabe! He\'s so happy, Gabe whispers into Revan\'s ear, "Try your chances... Open a case." Gaben grabs Revan with his powerful dev-team hands and puts him on his hands and knees. He\'s ready. Revan opens his pockets for Gabe. Gabe puts his hands deep into Revan\'s pockets. It costs so much, but Revan does it for CS:GO. Revan can feel his wallet emptying as his eyes start to water. He accepts the terms and conditions. Revan wants to please Gabe. Gaben lets out a mighty roar as he fills Revan\'s computer with keys. Revan opens all the cases and gets nothing worth anything at all.', 'CS:GO is love... CS:GO is life... \ufeff', '¤Revan The Anthro Dragon¤', '181 products in account', '179']
['5,066 of 5,692 people (89%) found this review helpful 2 people found this review funny', 'Recommended', '296.2 hrs on record', 'Posted: December 14, 2014', 'Knife = free Knife with paint on it = 200$', 'Sir Grayson', '152 products in account', '29']
['11,568 of 13,088 people (88%) found this review helpful 1 person found this review funny', 'Recommended', '953.3 hrs on record', 'Posted: November 1, 2014', 'Knife in real life: 10$ Knife in game: 400$ 10/10', 'Enderborn', '162 products in account', '114']
['5,163 of 5,550 people (93%) found this review helpful 242 people found this review funny', 'Recommended', '151.9 hrs on record', 'Posted: February 13', "If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins", 'BakeACake', '20 products in account', '27']
['8,925 of 9,744 people (92%) found this review helpful 145 people found this review funny', 'Recommended', '341.3 hrs on record', 'Posted: February 1', "It's like roulette; fun until it turns into Russian.", 'Delta', '124 products in account', '69']
['15,517 of 17,300 people (90%) found this review helpful 1 person found this review funny', 'Recommended', '1,176.1 hrs on record', 'Posted: February 27, 2014', 'you either die a noob or live long enough to get called a hacker', 'compliKATIEd', '114 products in account', '174']

In [48]:
len(reviews)
reviews = list(reviews)
reviews


Out[48]:
[{'achievement_progress': {'num_achievements_attained': '88',
   'num_achievements_possible': '167'},
  'date_posted': 'February 13, 2015',
  'found_helpful_percentage': 0.9302702702702703,
  'friend_player_level': '5',
  'hours_previous_2_weeks': '44.3',
  'num_badges': '4',
  'num_comments': '27',
  'num_found_funny': '242',
  'num_found_helpful': 5163,
  'num_found_unhelpful': 387,
  'num_friends': '70',
  'num_games_owned': '20',
  'num_groups': '21',
  'num_reviews': '3',
  'num_screenshots': '113',
  'num_voted_helpfulness': 5550,
  'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
  'recommended': 'Recommended',
  'review': "If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins",
  'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/?insideModal=1',
  'steam_id_number': '76561198092689293',
  'total_game_hours': '151.9',
  'username': 'BakeACake'},
 {'achievement_progress': {'num_achievements_attained': '22',
   'num_achievements_possible': '29'},
  'date_posted': 'February 1, 2015',
  'found_helpful_percentage': 0.915948275862069,
  'friend_player_level': '12',
  'hours_previous_2_weeks': '40.9',
  'num_badges': '9',
  'num_comments': '69',
  'num_found_funny': '145',
  'num_found_helpful': 8925,
  'num_found_unhelpful': 819,
  'num_friends': '241',
  'num_games_owned': '124',
  'num_groups': '5',
  'num_reviews': '1',
  'num_screenshots': '238',
  'num_voted_helpfulness': 9744,
  'profile_url': 'http://steamcommunity.com/id/Delta3D',
  'recommended': 'Recommended',
  'review': "It's like roulette; fun until it turns into Russian.",
  'review_url': 'http://steamcommunity.com/id/Delta3D/recommended/730/?insideModal=1',
  'steam_id_number': 'Delta3D',
  'total_game_hours': '341.3',
  'username': 'Delta'},
 {'achievement_progress': {'num_achievements_attained': '1',
   'num_achievements_possible': '75'},
  'date_posted': 'February 27, 2014, 2015',
  'found_helpful_percentage': 0.8969364161849711,
  'friend_player_level': '19',
  'hours_previous_2_weeks': '14.0',
  'num_badges': '17',
  'num_comments': '174',
  'num_found_funny': '1',
  'num_found_helpful': 15517,
  'num_found_unhelpful': 1783,
  'num_friends': '158',
  'num_games_owned': '114',
  'num_groups': '6',
  'num_reviews': '4',
  'num_screenshots': '82',
  'num_voted_helpfulness': 17300,
  'profile_url': 'http://steamcommunity.com/id/kadiv',
  'recommended': 'Recommended',
  'review': 'you either die a noob or live long enough to get called a hacker',
  'review_url': 'http://steamcommunity.com/id/kadiv/recommended/730/?insideModal=1',
  'steam_id_number': 'kadiv',
  'total_game_hours': '1176.1',
  'username': 'compliKATIEd'},
 {'achievement_progress': {'num_achievements_attained': '0',
   'num_achievements_possible': '42'},
  'date_posted': 'January 14, 2015',
  'found_helpful_percentage': 0.9026794742163802,
  'friend_player_level': '130',
  'hours_previous_2_weeks': '10.1',
  'num_badges': '212',
  'num_comments': '27',
  'num_found_funny': '42',
  'num_found_helpful': 3571,
  'num_found_unhelpful': 385,
  'num_friends': '224',
  'num_games_owned': '390',
  'num_groups': '66',
  'num_reviews': '3',
  'num_screenshots': '2,813',
  'num_voted_helpfulness': 3956,
  'profile_url': 'http://steamcommunity.com/id/knal',
  'recommended': 'Recommended',
  'review': 'Your self-esteem either dies in this game or it inflates to unbearable proportions.',
  'review_url': 'http://steamcommunity.com/id/knal/recommended/730/?insideModal=1',
  'steam_id_number': 'knal',
  'total_game_hours': '554.6',
  'username': 'Knalraap'},
 {'achievement_progress': {'num_achievements_attained': '15',
   'num_achievements_possible': '22'},
  'date_posted': 'July 13, 2014, 2015',
  'found_helpful_percentage': 0.8943373932012362,
  'friend_player_level': '12',
  'hours_previous_2_weeks': '8.0',
  'num_badges': '7',
  'num_comments': '519',
  'num_found_funny': '1',
  'num_found_helpful': 19679,
  'num_found_unhelpful': 2325,
  'num_friends': '13',
  'num_games_owned': '219',
  'num_groups': '9',
  'num_reviews': '5',
  'num_screenshots': '28',
  'num_voted_helpfulness': 22004,
  'profile_url': 'http://steamcommunity.com/profiles/76561198003457024',
  'recommended': 'Recommended',
  'review': 'Kill someone with a P90 - "You\'re a fuc**** noob!! Noob weapon!!" Kill someone with a P90 through a smoke - "You\'re a fuc**** hacker!!" Kill someone with a AWP - "You\'re a fuc**** noob!! Noob weapon!!" Kill someone with a AWP through a door - "You\'re a fuc**** hacker!!" In a 1 vs 5 you die - "You\'re a fuc**** noob!!" In a 1 vs 5 you win - "You\'re a fuc**** hacker!!" Kill someone with a headshot - "Hacker!!" Get headshoted by someone - "Owned!!" and get teabagged Kill someone with a grenade - "Luck!!" Get killed by someone with a grenade - "AHAHAHAHA" Get teamkilled by someone - "Get out of the way you fuc**** idiot!!" Accidentally teamkill someone - "You\'re a fuc**** idiot!!" Blocked by someone - Dies Accidentally blocks someone - "Get out the way you fuc**** idiot!!" Decide to save - "You\'re a fuc**** coward!!" Decide not to save - "Save you fuc**** idiot!!" Kill someone while defending the bomb - "You fuc**** camper!!" Kill someone while defending the hostages - "You fuc**** camper!!" Someone dies - The deceased one starts to rage Your team lose the round - Your team starts to rage Your team is losing 10-2 - Someone rages quit Go to the balcony in Italy - "You fuc**** hacker!!" Worst guy receives a drop - "Are you fuc**** serious!?" Warm up - Everybody tries to spawn kill Score is 5-1 in your favor - "This is a T map!" Score is 1-5 againts you - "This is a CT map!" Lose the first 2 rounds - Someone asks to get kicked Last round - Everybody buys Negev Your team is loosinh and you are in last - Someone vote kicks you Win a match - All enemy team rages Lose a match - Yout team rages Someone\'s Internet crashes - 30 minutes ban Your Internet crashes - 7 days ban 10/10 Best rage simulator out there!',
  'review_url': 'http://steamcommunity.com/profiles/76561198003457024/recommended/730/?insideModal=1',
  'steam_id_number': '76561198003457024',
  'total_game_hours': '723.8',
  'username': 'Fokogrilo'},
 {'achievement_progress': {'num_achievements_attained': '14',
   'num_achievements_possible': '29'},
  'date_posted': 'September 1, 2014, 2015',
  'found_helpful_percentage': 0.8951194184839044,
  'friend_player_level': '12',
  'hours_previous_2_weeks': '0.3',
  'num_badges': '7',
  'num_comments': '132',
  'num_found_funny': '3',
  'num_found_helpful': 10344,
  'num_found_unhelpful': 1212,
  'num_friends': '206',
  'num_games_owned': '59',
  'num_groups': '133',
  'num_reviews': '11',
  'num_screenshots': '1,462',
  'num_voted_helpfulness': 11556,
  'profile_url': 'http://steamcommunity.com/id/hiaympalliman',
  'recommended': 'Recommended',
  'review': 'Bought this game, played online, learned fluent russian 2 weeks later.',
  'review_url': 'http://steamcommunity.com/id/hiaympalliman/recommended/730/?insideModal=1',
  'steam_id_number': 'hiaympalliman',
  'total_game_hours': '82.0',
  'username': 'Mr. Palliman'},
 {'achievement_progress': {'num_achievements_attained': '112',
   'num_achievements_possible': '167'},
  'date_posted': 'January 24, 2015',
  'found_helpful_percentage': 0.8917796239615217,
  'friend_player_level': '13',
  'hours_previous_2_weeks': '34.5',
  'num_badges': '9',
  'num_comments': '81',
  'num_found_funny': '139',
  'num_found_helpful': 8158,
  'num_found_unhelpful': 990,
  'num_friends': '107',
  'num_games_owned': '9',
  'num_groups': '7',
  'num_reviews': '1',
  'num_screenshots': '30',
  'num_voted_helpfulness': 9148,
  'profile_url': 'http://steamcommunity.com/id/ZoomaAP',
  'recommended': 'Recommended',
  'review': '>see a guy >shoot him >miss every shot >he turns around >kills me in one shot >exit cs:go 10/10',
  'review_url': 'http://steamcommunity.com/id/ZoomaAP/recommended/730/?insideModal=1',
  'steam_id_number': 'ZoomaAP',
  'total_game_hours': '424.8',
  'username': 'Zooma'},
 {'achievement_progress': {'num_achievements_attained': '167',
   'num_achievements_possible': '167'},
  'date_posted': 'March 17, 2015',
  'found_helpful_percentage': 0.8892784437909975,
  'friend_player_level': '36',
  'hours_previous_2_weeks': '193.1',
  'num_badges': '50',
  'num_comments': '179',
  'num_found_funny': '295',
  'num_found_helpful': 7863,
  'num_found_unhelpful': 979,
  'num_friends': '29',
  'num_games_owned': '181',
  'num_groups': '201',
  'num_reviews': '52',
  'num_screenshots': '5,148',
  'num_voted_helpfulness': 8842,
  'profile_url': 'http://steamcommunity.com/id/RevanDaDragon',
  'recommended': 'Recommended',
  'review': 'Revan was only 23 years old. He loved CS:GO so much. He had most of the achievements and items. He prayed to Gaben every night before bed, thanking him for the inventory he\'s been given. "CS:GO is love," he says, "CS:GO is life." His elder Dragon hears him and calls him a silver scrublord. He knows his elder is just jealous of his son\'s devotion to Gabe. He calls him a console peasant. He slaps him and sends him to sleep. He\'s crying now and his face hurts. He lays in bed, and it\'s really cold. He feels a warmth moving towards him. He looks up. It\'s Gabe! He\'s so happy, Gabe whispers into Revan\'s ear, "Try your chances... Open a case." Gaben grabs Revan with his powerful dev-team hands and puts him on his hands and knees. He\'s ready. Revan opens his pockets for Gabe. Gabe puts his hands deep into Revan\'s pockets. It costs so much, but Revan does it for CS:GO. Revan can feel his wallet emptying as his eyes start to water. He accepts the terms and conditions. Revan wants to please Gabe. Gaben lets out a mighty roar as he fills Revan\'s computer with keys. Revan opens all the cases and gets nothing worth anything at all. CS:GO is love... CS:GO is life... \ufeff',
  'review_url': 'http://steamcommunity.com/id/RevanDaDragon/recommended/730/?insideModal=1',
  'steam_id_number': 'RevanDaDragon',
  'total_game_hours': '3415.4',
  'username': 'Revan The Anthro Dragon'},
 {'achievement_progress': {'num_achievements_attained': '27',
   'num_achievements_possible': '106'},
  'date_posted': 'December 14, 2014, 2015',
  'found_helpful_percentage': 0.8900210822206606,
  'friend_player_level': '30',
  'hours_previous_2_weeks': '7.1',
  'num_badges': '39',
  'num_comments': '29',
  'num_found_funny': '2',
  'num_found_helpful': 5066,
  'num_found_unhelpful': 626,
  'num_friends': '163',
  'num_games_owned': '152',
  'num_groups': '33',
  'num_reviews': '7',
  'num_screenshots': '307',
  'num_voted_helpfulness': 5692,
  'profile_url': 'http://steamcommunity.com/id/greybutnotgey',
  'recommended': 'Recommended',
  'review': 'Knife = free Knife with paint on it = 200$',
  'review_url': 'http://steamcommunity.com/id/greybutnotgey/recommended/730/?insideModal=1',
  'steam_id_number': 'greybutnotgey',
  'total_game_hours': '296.2',
  'username': 'Sir Grayson'},
 {'achievement_progress': {'num_achievements_attained': '49',
   'num_achievements_possible': '75'},
  'date_posted': 'November 1, 2014, 2015',
  'found_helpful_percentage': 0.8838630806845966,
  'friend_player_level': '24',
  'hours_previous_2_weeks': '0.6',
  'num_badges': '20',
  'num_comments': '114',
  'num_found_funny': '1',
  'num_found_helpful': 11568,
  'num_found_unhelpful': 1520,
  'num_friends': '190',
  'num_games_owned': '162',
  'num_groups': '47',
  'num_reviews': '3',
  'num_screenshots': '58',
  'num_voted_helpfulness': 13088,
  'profile_url': 'http://steamcommunity.com/id/End3rb0rn',
  'recommended': 'Recommended',
  'review': 'Knife in real life: 10$ Knife in game: 400$ 10/10',
  'review_url': 'http://steamcommunity.com/id/End3rb0rn/recommended/730/?insideModal=1',
  'steam_id_number': 'End3rb0rn',
  'total_game_hours': '953.3',
  'username': 'Enderborn'},
 {'achievement_progress': {'num_achievements_attained': '88',
   'num_achievements_possible': '167'},
  'date_posted': 'February 13, 2015',
  'found_helpful_percentage': 0.9302702702702703,
  'friend_player_level': '5',
  'hours_previous_2_weeks': '44.3',
  'num_badges': '4',
  'num_comments': '27',
  'num_found_funny': '242',
  'num_found_helpful': 5163,
  'num_found_unhelpful': 387,
  'num_friends': '70',
  'num_games_owned': '20',
  'num_groups': '21',
  'num_reviews': '3',
  'num_screenshots': '113',
  'num_voted_helpfulness': 5550,
  'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
  'recommended': 'Recommended',
  'review': "If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins",
  'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/?insideModal=1',
  'steam_id_number': '76561198092689293',
  'total_game_hours': '151.9',
  'username': 'BakeACake'},
 {'achievement_progress': {'num_achievements_attained': '22',
   'num_achievements_possible': '29'},
  'date_posted': 'February 1, 2015',
  'found_helpful_percentage': 0.915948275862069,
  'friend_player_level': '12',
  'hours_previous_2_weeks': '40.9',
  'num_badges': '9',
  'num_comments': '69',
  'num_found_funny': '145',
  'num_found_helpful': 8925,
  'num_found_unhelpful': 819,
  'num_friends': '241',
  'num_games_owned': '124',
  'num_groups': '5',
  'num_reviews': '1',
  'num_screenshots': '238',
  'num_voted_helpfulness': 9744,
  'profile_url': 'http://steamcommunity.com/id/Delta3D',
  'recommended': 'Recommended',
  'review': "It's like roulette; fun until it turns into Russian.",
  'review_url': 'http://steamcommunity.com/id/Delta3D/recommended/730/?insideModal=1',
  'steam_id_number': 'Delta3D',
  'total_game_hours': '341.3',
  'username': 'Delta'},
 {'achievement_progress': {'num_achievements_attained': '1',
   'num_achievements_possible': '75'},
  'date_posted': 'February 27, 2014, 2015',
  'found_helpful_percentage': 0.8969364161849711,
  'friend_player_level': '19',
  'hours_previous_2_weeks': '14.0',
  'num_badges': '17',
  'num_comments': '174',
  'num_found_funny': '1',
  'num_found_helpful': 15517,
  'num_found_unhelpful': 1783,
  'num_friends': '158',
  'num_games_owned': '114',
  'num_groups': '6',
  'num_reviews': '4',
  'num_screenshots': '82',
  'num_voted_helpfulness': 17300,
  'profile_url': 'http://steamcommunity.com/id/kadiv',
  'recommended': 'Recommended',
  'review': 'you either die a noob or live long enough to get called a hacker',
  'review_url': 'http://steamcommunity.com/id/kadiv/recommended/730/?insideModal=1',
  'steam_id_number': 'kadiv',
  'total_game_hours': '1176.1',
  'username': 'compliKATIEd'},
 {'achievement_progress': {'num_achievements_attained': '0',
   'num_achievements_possible': '42'},
  'date_posted': 'January 14, 2015',
  'found_helpful_percentage': 0.9026794742163802,
  'friend_player_level': '130',
  'hours_previous_2_weeks': '10.1',
  'num_badges': '212',
  'num_comments': '27',
  'num_found_funny': '42',
  'num_found_helpful': 3571,
  'num_found_unhelpful': 385,
  'num_friends': '224',
  'num_games_owned': '390',
  'num_groups': '66',
  'num_reviews': '3',
  'num_screenshots': '2,813',
  'num_voted_helpfulness': 3956,
  'profile_url': 'http://steamcommunity.com/id/knal',
  'recommended': 'Recommended',
  'review': 'Your self-esteem either dies in this game or it inflates to unbearable proportions.',
  'review_url': 'http://steamcommunity.com/id/knal/recommended/730/?insideModal=1',
  'steam_id_number': 'knal',
  'total_game_hours': '554.6',
  'username': 'Knalraap'},
 {'achievement_progress': {'num_achievements_attained': '15',
   'num_achievements_possible': '22'},
  'date_posted': 'July 13, 2014, 2015',
  'found_helpful_percentage': 0.8943373932012362,
  'friend_player_level': '12',
  'hours_previous_2_weeks': '8.0',
  'num_badges': '7',
  'num_comments': '519',
  'num_found_funny': '1',
  'num_found_helpful': 19679,
  'num_found_unhelpful': 2325,
  'num_friends': '13',
  'num_games_owned': '219',
  'num_groups': '9',
  'num_reviews': '5',
  'num_screenshots': '28',
  'num_voted_helpfulness': 22004,
  'profile_url': 'http://steamcommunity.com/profiles/76561198003457024',
  'recommended': 'Recommended',
  'review': 'Kill someone with a P90 - "You\'re a fuc**** noob!! Noob weapon!!" Kill someone with a P90 through a smoke - "You\'re a fuc**** hacker!!" Kill someone with a AWP - "You\'re a fuc**** noob!! Noob weapon!!" Kill someone with a AWP through a door - "You\'re a fuc**** hacker!!" In a 1 vs 5 you die - "You\'re a fuc**** noob!!" In a 1 vs 5 you win - "You\'re a fuc**** hacker!!" Kill someone with a headshot - "Hacker!!" Get headshoted by someone - "Owned!!" and get teabagged Kill someone with a grenade - "Luck!!" Get killed by someone with a grenade - "AHAHAHAHA" Get teamkilled by someone - "Get out of the way you fuc**** idiot!!" Accidentally teamkill someone - "You\'re a fuc**** idiot!!" Blocked by someone - Dies Accidentally blocks someone - "Get out the way you fuc**** idiot!!" Decide to save - "You\'re a fuc**** coward!!" Decide not to save - "Save you fuc**** idiot!!" Kill someone while defending the bomb - "You fuc**** camper!!" Kill someone while defending the hostages - "You fuc**** camper!!" Someone dies - The deceased one starts to rage Your team lose the round - Your team starts to rage Your team is losing 10-2 - Someone rages quit Go to the balcony in Italy - "You fuc**** hacker!!" Worst guy receives a drop - "Are you fuc**** serious!?" Warm up - Everybody tries to spawn kill Score is 5-1 in your favor - "This is a T map!" Score is 1-5 againts you - "This is a CT map!" Lose the first 2 rounds - Someone asks to get kicked Last round - Everybody buys Negev Your team is loosinh and you are in last - Someone vote kicks you Win a match - All enemy team rages Lose a match - Yout team rages Someone\'s Internet crashes - 30 minutes ban Your Internet crashes - 7 days ban 10/10 Best rage simulator out there!',
  'review_url': 'http://steamcommunity.com/profiles/76561198003457024/recommended/730/?insideModal=1',
  'steam_id_number': '76561198003457024',
  'total_game_hours': '723.8',
  'username': 'Fokogrilo'},
 {'achievement_progress': {'num_achievements_attained': '14',
   'num_achievements_possible': '29'},
  'date_posted': 'September 1, 2014, 2015',
  'found_helpful_percentage': 0.8951194184839044,
  'friend_player_level': '12',
  'hours_previous_2_weeks': '0.3',
  'num_badges': '7',
  'num_comments': '132',
  'num_found_funny': '3',
  'num_found_helpful': 10344,
  'num_found_unhelpful': 1212,
  'num_friends': '206',
  'num_games_owned': '59',
  'num_groups': '133',
  'num_reviews': '11',
  'num_screenshots': '1,462',
  'num_voted_helpfulness': 11556,
  'profile_url': 'http://steamcommunity.com/id/hiaympalliman',
  'recommended': 'Recommended',
  'review': 'Bought this game, played online, learned fluent russian 2 weeks later.',
  'review_url': 'http://steamcommunity.com/id/hiaympalliman/recommended/730/?insideModal=1',
  'steam_id_number': 'hiaympalliman',
  'total_game_hours': '82.0',
  'username': 'Mr. Palliman'},
 {'achievement_progress': {'num_achievements_attained': '112',
   'num_achievements_possible': '167'},
  'date_posted': 'January 24, 2015',
  'found_helpful_percentage': 0.8917796239615217,
  'friend_player_level': '13',
  'hours_previous_2_weeks': '34.5',
  'num_badges': '9',
  'num_comments': '81',
  'num_found_funny': '139',
  'num_found_helpful': 8158,
  'num_found_unhelpful': 990,
  'num_friends': '107',
  'num_games_owned': '9',
  'num_groups': '7',
  'num_reviews': '1',
  'num_screenshots': '30',
  'num_voted_helpfulness': 9148,
  'profile_url': 'http://steamcommunity.com/id/ZoomaAP',
  'recommended': 'Recommended',
  'review': '>see a guy >shoot him >miss every shot >he turns around >kills me in one shot >exit cs:go 10/10',
  'review_url': 'http://steamcommunity.com/id/ZoomaAP/recommended/730/?insideModal=1',
  'steam_id_number': 'ZoomaAP',
  'total_game_hours': '424.8',
  'username': 'Zooma'},
 {'achievement_progress': {'num_achievements_attained': '167',
   'num_achievements_possible': '167'},
  'date_posted': 'March 17, 2015',
  'found_helpful_percentage': 0.8892784437909975,
  'friend_player_level': '36',
  'hours_previous_2_weeks': '193.1',
  'num_badges': '50',
  'num_comments': '179',
  'num_found_funny': '295',
  'num_found_helpful': 7863,
  'num_found_unhelpful': 979,
  'num_friends': '29',
  'num_games_owned': '181',
  'num_groups': '201',
  'num_reviews': '52',
  'num_screenshots': '5,148',
  'num_voted_helpfulness': 8842,
  'profile_url': 'http://steamcommunity.com/id/RevanDaDragon',
  'recommended': 'Recommended',
  'review': 'Revan was only 23 years old. He loved CS:GO so much. He had most of the achievements and items. He prayed to Gaben every night before bed, thanking him for the inventory he\'s been given. "CS:GO is love," he says, "CS:GO is life." His elder Dragon hears him and calls him a silver scrublord. He knows his elder is just jealous of his son\'s devotion to Gabe. He calls him a console peasant. He slaps him and sends him to sleep. He\'s crying now and his face hurts. He lays in bed, and it\'s really cold. He feels a warmth moving towards him. He looks up. It\'s Gabe! He\'s so happy, Gabe whispers into Revan\'s ear, "Try your chances... Open a case." Gaben grabs Revan with his powerful dev-team hands and puts him on his hands and knees. He\'s ready. Revan opens his pockets for Gabe. Gabe puts his hands deep into Revan\'s pockets. It costs so much, but Revan does it for CS:GO. Revan can feel his wallet emptying as his eyes start to water. He accepts the terms and conditions. Revan wants to please Gabe. Gaben lets out a mighty roar as he fills Revan\'s computer with keys. Revan opens all the cases and gets nothing worth anything at all. CS:GO is love... CS:GO is life... \ufeff',
  'review_url': 'http://steamcommunity.com/id/RevanDaDragon/recommended/730/?insideModal=1',
  'steam_id_number': 'RevanDaDragon',
  'total_game_hours': '3415.4',
  'username': 'Revan The Anthro Dragon'},
 {'achievement_progress': {'num_achievements_attained': '27',
   'num_achievements_possible': '106'},
  'date_posted': 'December 14, 2014, 2015',
  'found_helpful_percentage': 0.8900210822206606,
  'friend_player_level': '30',
  'hours_previous_2_weeks': '7.1',
  'num_badges': '39',
  'num_comments': '29',
  'num_found_funny': '2',
  'num_found_helpful': 5066,
  'num_found_unhelpful': 626,
  'num_friends': '163',
  'num_games_owned': '152',
  'num_groups': '33',
  'num_reviews': '7',
  'num_screenshots': '307',
  'num_voted_helpfulness': 5692,
  'profile_url': 'http://steamcommunity.com/id/greybutnotgey',
  'recommended': 'Recommended',
  'review': 'Knife = free Knife with paint on it = 200$',
  'review_url': 'http://steamcommunity.com/id/greybutnotgey/recommended/730/?insideModal=1',
  'steam_id_number': 'greybutnotgey',
  'total_game_hours': '296.2',
  'username': 'Sir Grayson'},
 {'achievement_progress': {'num_achievements_attained': '49',
   'num_achievements_possible': '75'},
  'date_posted': 'November 1, 2014, 2015',
  'found_helpful_percentage': 0.8838630806845966,
  'friend_player_level': '24',
  'hours_previous_2_weeks': '0.6',
  'num_badges': '20',
  'num_comments': '114',
  'num_found_funny': '1',
  'num_found_helpful': 11568,
  'num_found_unhelpful': 1520,
  'num_friends': '190',
  'num_games_owned': '162',
  'num_groups': '47',
  'num_reviews': '3',
  'num_screenshots': '58',
  'num_voted_helpfulness': 13088,
  'profile_url': 'http://steamcommunity.com/id/End3rb0rn',
  'recommended': 'Recommended',
  'review': 'Knife in real life: 10$ Knife in game: 400$ 10/10',
  'review_url': 'http://steamcommunity.com/id/End3rb0rn/recommended/730/?insideModal=1',
  'steam_id_number': 'End3rb0rn',
  'total_game_hours': '953.3',
  'username': 'Enderborn'},
 {'achievement_progress': {'num_achievements_attained': '88',
   'num_achievements_possible': '167'},
  'date_posted': 'February 13, 2015',
  'found_helpful_percentage': 0.9302702702702703,
  'friend_player_level': '5',
  'hours_previous_2_weeks': '44.3',
  'num_badges': '4',
  'num_comments': '27',
  'num_found_funny': '242',
  'num_found_helpful': 5163,
  'num_found_unhelpful': 387,
  'num_friends': '70',
  'num_games_owned': '20',
  'num_groups': '21',
  'num_reviews': '3',
  'num_screenshots': '113',
  'num_voted_helpfulness': 5550,
  'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
  'recommended': 'Recommended',
  'review': "If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins",
  'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/?insideModal=1',
  'steam_id_number': '76561198092689293',
  'total_game_hours': '151.9',
  'username': 'BakeACake'},
 {'achievement_progress': {'num_achievements_attained': '22',
   'num_achievements_possible': '29'},
  'date_posted': 'February 1, 2015',
  'found_helpful_percentage': 0.915948275862069,
  'friend_player_level': '12',
  'hours_previous_2_weeks': '40.9',
  'num_badges': '9',
  'num_comments': '69',
  'num_found_funny': '145',
  'num_found_helpful': 8925,
  'num_found_unhelpful': 819,
  'num_friends': '241',
  'num_games_owned': '124',
  'num_groups': '5',
  'num_reviews': '1',
  'num_screenshots': '238',
  'num_voted_helpfulness': 9744,
  'profile_url': 'http://steamcommunity.com/id/Delta3D',
  'recommended': 'Recommended',
  'review': "It's like roulette; fun until it turns into Russian.",
  'review_url': 'http://steamcommunity.com/id/Delta3D/recommended/730/?insideModal=1',
  'steam_id_number': 'Delta3D',
  'total_game_hours': '341.3',
  'username': 'Delta'},
 {'achievement_progress': {'num_achievements_attained': '1',
   'num_achievements_possible': '75'},
  'date_posted': 'February 27, 2014, 2015',
  'found_helpful_percentage': 0.8969364161849711,
  'friend_player_level': '19',
  'hours_previous_2_weeks': '14.0',
  'num_badges': '17',
  'num_comments': '174',
  'num_found_funny': '1',
  'num_found_helpful': 15517,
  'num_found_unhelpful': 1783,
  'num_friends': '158',
  'num_games_owned': '114',
  'num_groups': '6',
  'num_reviews': '4',
  'num_screenshots': '82',
  'num_voted_helpfulness': 17300,
  'profile_url': 'http://steamcommunity.com/id/kadiv',
  'recommended': 'Recommended',
  'review': 'you either die a noob or live long enough to get called a hacker',
  'review_url': 'http://steamcommunity.com/id/kadiv/recommended/730/?insideModal=1',
  'steam_id_number': 'kadiv',
  'total_game_hours': '1176.1',
  'username': 'compliKATIEd'},
 {'achievement_progress': {'num_achievements_attained': '0',
   'num_achievements_possible': '42'},
  'date_posted': 'January 14, 2015',
  'found_helpful_percentage': 0.9026794742163802,
  'friend_player_level': '130',
  'hours_previous_2_weeks': '10.1',
  'num_badges': '212',
  'num_comments': '27',
  'num_found_funny': '42',
  'num_found_helpful': 3571,
  'num_found_unhelpful': 385,
  'num_friends': '224',
  'num_games_owned': '390',
  'num_groups': '66',
  'num_reviews': '3',
  'num_screenshots': '2,813',
  'num_voted_helpfulness': 3956,
  'profile_url': 'http://steamcommunity.com/id/knal',
  'recommended': 'Recommended',
  'review': 'Your self-esteem either dies in this game or it inflates to unbearable proportions.',
  'review_url': 'http://steamcommunity.com/id/knal/recommended/730/?insideModal=1',
  'steam_id_number': 'knal',
  'total_game_hours': '554.6',
  'username': 'Knalraap'},
 {'achievement_progress': {'num_achievements_attained': '15',
   'num_achievements_possible': '22'},
  'date_posted': 'July 13, 2014, 2015',
  'found_helpful_percentage': 0.8943373932012362,
  'friend_player_level': '12',
  'hours_previous_2_weeks': '8.0',
  'num_badges': '7',
  'num_comments': '519',
  'num_found_funny': '1',
  'num_found_helpful': 19679,
  'num_found_unhelpful': 2325,
  'num_friends': '13',
  'num_games_owned': '219',
  'num_groups': '9',
  'num_reviews': '5',
  'num_screenshots': '28',
  'num_voted_helpfulness': 22004,
  'profile_url': 'http://steamcommunity.com/profiles/76561198003457024',
  'recommended': 'Recommended',
  'review': 'Kill someone with a P90 - "You\'re a fuc**** noob!! Noob weapon!!" Kill someone with a P90 through a smoke - "You\'re a fuc**** hacker!!" Kill someone with a AWP - "You\'re a fuc**** noob!! Noob weapon!!" Kill someone with a AWP through a door - "You\'re a fuc**** hacker!!" In a 1 vs 5 you die - "You\'re a fuc**** noob!!" In a 1 vs 5 you win - "You\'re a fuc**** hacker!!" Kill someone with a headshot - "Hacker!!" Get headshoted by someone - "Owned!!" and get teabagged Kill someone with a grenade - "Luck!!" Get killed by someone with a grenade - "AHAHAHAHA" Get teamkilled by someone - "Get out of the way you fuc**** idiot!!" Accidentally teamkill someone - "You\'re a fuc**** idiot!!" Blocked by someone - Dies Accidentally blocks someone - "Get out the way you fuc**** idiot!!" Decide to save - "You\'re a fuc**** coward!!" Decide not to save - "Save you fuc**** idiot!!" Kill someone while defending the bomb - "You fuc**** camper!!" Kill someone while defending the hostages - "You fuc**** camper!!" Someone dies - The deceased one starts to rage Your team lose the round - Your team starts to rage Your team is losing 10-2 - Someone rages quit Go to the balcony in Italy - "You fuc**** hacker!!" Worst guy receives a drop - "Are you fuc**** serious!?" Warm up - Everybody tries to spawn kill Score is 5-1 in your favor - "This is a T map!" Score is 1-5 againts you - "This is a CT map!" Lose the first 2 rounds - Someone asks to get kicked Last round - Everybody buys Negev Your team is loosinh and you are in last - Someone vote kicks you Win a match - All enemy team rages Lose a match - Yout team rages Someone\'s Internet crashes - 30 minutes ban Your Internet crashes - 7 days ban 10/10 Best rage simulator out there!',
  'review_url': 'http://steamcommunity.com/profiles/76561198003457024/recommended/730/?insideModal=1',
  'steam_id_number': '76561198003457024',
  'total_game_hours': '723.8',
  'username': 'Fokogrilo'},
 {'achievement_progress': {'num_achievements_attained': '14',
   'num_achievements_possible': '29'},
  'date_posted': 'September 1, 2014, 2015',
  'found_helpful_percentage': 0.8951194184839044,
  'friend_player_level': '12',
  'hours_previous_2_weeks': '0.3',
  'num_badges': '7',
  'num_comments': '132',
  'num_found_funny': '3',
  'num_found_helpful': 10344,
  'num_found_unhelpful': 1212,
  'num_friends': '206',
  'num_games_owned': '59',
  'num_groups': '133',
  'num_reviews': '11',
  'num_screenshots': '1,462',
  'num_voted_helpfulness': 11556,
  'profile_url': 'http://steamcommunity.com/id/hiaympalliman',
  'recommended': 'Recommended',
  'review': 'Bought this game, played online, learned fluent russian 2 weeks later.',
  'review_url': 'http://steamcommunity.com/id/hiaympalliman/recommended/730/?insideModal=1',
  'steam_id_number': 'hiaympalliman',
  'total_game_hours': '82.0',
  'username': 'Mr. Palliman'},
 {'achievement_progress': {'num_achievements_attained': '112',
   'num_achievements_possible': '167'},
  'date_posted': 'January 24, 2015',
  'found_helpful_percentage': 0.8917796239615217,
  'friend_player_level': '13',
  'hours_previous_2_weeks': '34.5',
  'num_badges': '9',
  'num_comments': '81',
  'num_found_funny': '139',
  'num_found_helpful': 8158,
  'num_found_unhelpful': 990,
  'num_friends': '107',
  'num_games_owned': '9',
  'num_groups': '7',
  'num_reviews': '1',
  'num_screenshots': '30',
  'num_voted_helpfulness': 9148,
  'profile_url': 'http://steamcommunity.com/id/ZoomaAP',
  'recommended': 'Recommended',
  'review': '>see a guy >shoot him >miss every shot >he turns around >kills me in one shot >exit cs:go 10/10',
  'review_url': 'http://steamcommunity.com/id/ZoomaAP/recommended/730/?insideModal=1',
  'steam_id_number': 'ZoomaAP',
  'total_game_hours': '424.8',
  'username': 'Zooma'},
 {'achievement_progress': {'num_achievements_attained': '167',
   'num_achievements_possible': '167'},
  'date_posted': 'March 17, 2015',
  'found_helpful_percentage': 0.8892784437909975,
  'friend_player_level': '36',
  'hours_previous_2_weeks': '193.1',
  'num_badges': '50',
  'num_comments': '179',
  'num_found_funny': '295',
  'num_found_helpful': 7863,
  'num_found_unhelpful': 979,
  'num_friends': '29',
  'num_games_owned': '181',
  'num_groups': '201',
  'num_reviews': '52',
  'num_screenshots': '5,148',
  'num_voted_helpfulness': 8842,
  'profile_url': 'http://steamcommunity.com/id/RevanDaDragon',
  'recommended': 'Recommended',
  'review': 'Revan was only 23 years old. He loved CS:GO so much. He had most of the achievements and items. He prayed to Gaben every night before bed, thanking him for the inventory he\'s been given. "CS:GO is love," he says, "CS:GO is life." His elder Dragon hears him and calls him a silver scrublord. He knows his elder is just jealous of his son\'s devotion to Gabe. He calls him a console peasant. He slaps him and sends him to sleep. He\'s crying now and his face hurts. He lays in bed, and it\'s really cold. He feels a warmth moving towards him. He looks up. It\'s Gabe! He\'s so happy, Gabe whispers into Revan\'s ear, "Try your chances... Open a case." Gaben grabs Revan with his powerful dev-team hands and puts him on his hands and knees. He\'s ready. Revan opens his pockets for Gabe. Gabe puts his hands deep into Revan\'s pockets. It costs so much, but Revan does it for CS:GO. Revan can feel his wallet emptying as his eyes start to water. He accepts the terms and conditions. Revan wants to please Gabe. Gaben lets out a mighty roar as he fills Revan\'s computer with keys. Revan opens all the cases and gets nothing worth anything at all. CS:GO is love... CS:GO is life... \ufeff',
  'review_url': 'http://steamcommunity.com/id/RevanDaDragon/recommended/730/?insideModal=1',
  'steam_id_number': 'RevanDaDragon',
  'total_game_hours': '3415.4',
  'username': 'Revan The Anthro Dragon'},
 {'achievement_progress': {'num_achievements_attained': '27',
   'num_achievements_possible': '106'},
  'date_posted': 'December 14, 2014, 2015',
  'found_helpful_percentage': 0.8900210822206606,
  'friend_player_level': '30',
  'hours_previous_2_weeks': '7.1',
  'num_badges': '39',
  'num_comments': '29',
  'num_found_funny': '2',
  'num_found_helpful': 5066,
  'num_found_unhelpful': 626,
  'num_friends': '163',
  'num_games_owned': '152',
  'num_groups': '33',
  'num_reviews': '7',
  'num_screenshots': '307',
  'num_voted_helpfulness': 5692,
  'profile_url': 'http://steamcommunity.com/id/greybutnotgey',
  'recommended': 'Recommended',
  'review': 'Knife = free Knife with paint on it = 200$',
  'review_url': 'http://steamcommunity.com/id/greybutnotgey/recommended/730/?insideModal=1',
  'steam_id_number': 'greybutnotgey',
  'total_game_hours': '296.2',
  'username': 'Sir Grayson'},
 {'achievement_progress': {'num_achievements_attained': '49',
   'num_achievements_possible': '75'},
  'date_posted': 'November 1, 2014, 2015',
  'found_helpful_percentage': 0.8838630806845966,
  'friend_player_level': '24',
  'hours_previous_2_weeks': '0.6',
  'num_badges': '20',
  'num_comments': '114',
  'num_found_funny': '1',
  'num_found_helpful': 11568,
  'num_found_unhelpful': 1520,
  'num_friends': '190',
  'num_games_owned': '162',
  'num_groups': '47',
  'num_reviews': '3',
  'num_screenshots': '58',
  'num_voted_helpfulness': 13088,
  'profile_url': 'http://steamcommunity.com/id/End3rb0rn',
  'recommended': 'Recommended',
  'review': 'Knife in real life: 10$ Knife in game: 400$ 10/10',
  'review_url': 'http://steamcommunity.com/id/End3rb0rn/recommended/730/?insideModal=1',
  'steam_id_number': 'End3rb0rn',
  'total_game_hours': '953.3',
  'username': 'Enderborn'},
 {'achievement_progress': {'num_achievements_attained': '88',
   'num_achievements_possible': '167'},
  'date_posted': 'February 13, 2015',
  'found_helpful_percentage': 0.9302702702702703,
  'friend_player_level': '5',
  'hours_previous_2_weeks': '44.3',
  'num_badges': '4',
  'num_comments': '27',
  'num_found_funny': '242',
  'num_found_helpful': 5163,
  'num_found_unhelpful': 387,
  'num_friends': '70',
  'num_games_owned': '20',
  'num_groups': '21',
  'num_reviews': '3',
  'num_screenshots': '113',
  'num_voted_helpfulness': 5550,
  'profile_url': 'http://steamcommunity.com/profiles/76561198092689293',
  'recommended': 'Recommended',
  'review': "If i had a dollar for each time someone screamed at me in another language, i'd still have no money because i spent it on skins",
  'review_url': 'http://steamcommunity.com/profiles/76561198092689293/recommended/730/?insideModal=1',
  'steam_id_number': '76561198092689293',
  'total_game_hours': '151.9',
  'username': 'BakeACake'},
 {'achievement_progress': {'num_achievements_attained': '22',
   'num_achievements_possible': '29'},
  'date_posted': 'February 1, 2015',
  'found_helpful_percentage': 0.915948275862069,
  'friend_player_level': '12',
  'hours_previous_2_weeks': '40.9',
  'num_badges': '9',
  'num_comments': '69',
  'num_found_funny': '145',
  'num_found_helpful': 8925,
  'num_found_unhelpful': 819,
  'num_friends': '241',
  'num_games_owned': '124',
  'num_groups': '5',
  'num_reviews': '1',
  'num_screenshots': '238',
  'num_voted_helpfulness': 9744,
  'profile_url': 'http://steamcommunity.com/id/Delta3D',
  'recommended': 'Recommended',
  'review': "It's like roulette; fun until it turns into Russian.",
  'review_url': 'http://steamcommunity.com/id/Delta3D/recommended/730/?insideModal=1',
  'steam_id_number': 'Delta3D',
  'total_game_hours': '341.3',
  'username': 'Delta'},
 {'achievement_progress': {'num_achievements_attained': '1',
   'num_achievements_possible': '75'},
  'date_posted': 'February 27, 2014, 2015',
  'found_helpful_percentage': 0.8969364161849711,
  'friend_player_level': '19',
  'hours_previous_2_weeks': '14.0',
  'num_badges': '17',
  'num_comments': '174',
  'num_found_funny': '1',
  'num_found_helpful': 15517,
  'num_found_unhelpful': 1783,
  'num_friends': '158',
  'num_games_owned': '114',
  'num_groups': '6',
  'num_reviews': '4',
  'num_screenshots': '82',
  'num_voted_helpfulness': 17300,
  'profile_url': 'http://steamcommunity.com/id/kadiv',
  'recommended': 'Recommended',
  'review': 'you either die a noob or live long enough to get called a hacker',
  'review_url': 'http://steamcommunity.com/id/kadiv/recommended/730/?insideModal=1',
  'steam_id_number': 'kadiv',
  'total_game_hours': '1176.1',
  'username': 'compliKATIEd'}]

In [49]:
len(reviews)


Out[49]:
33