EzDevInfo.com

jsoup

jsoup: Java HTML Parser, with best of DOM, CSS, and jquery jsoup Java HTML Parser, with best of DOM, CSS, and jquery open source java html parser, with dom, css, and jquery-like methods for easy data extraction.

How do I preserve line breaks when using jsoup to convert html to plain text?

I have the following code:

   public class NewClass {
        public String noTags(String str){
            return Jsoup.parse(str).text();
        }


      public static void main(String args[]) {
       String strings="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN \">" +
        "<HTML> <HEAD> <TITLE></TITLE> <style>body{ font-size: 12px;font-family: verdana, arial, helvetica, sans-serif;}</style> </HEAD> <BODY><p><b>hello world</b></p><p><br><b>yo</b> <a rel='nofollow' href=\"http://google.com\">googlez</a></p></BODY> </HTML> ";
  NewClass text = new NewClass();
      System.out.println((text.noTags(strings)));


}

And I have the result:

hello world yo googlez

But I want to break the line:

hello world
yo googlez

I have looked at jsoup's TextNode#getWholeText() but I can't figure out how to use it.

If there's a <br> in the markup I parse, how can I get a line break in my resulting output?


Source: (StackOverflow)

I get a SocketTimeoutException in Jsoup: Read timed out


I get a SocketTimeoutException when I try to parse a lot of HTML documents using Jsoup.
For example, I got a list of links :

<a rel='nofollow' href="www.domain.com/url1.html">link1</a>
<a rel='nofollow' href="www.domain.com/url2.html">link2</a>
<a rel='nofollow' href="www.domain.com/url3.html">link3</a>
<a rel='nofollow' href="www.domain.com/url4.html">link4</a>

For each link, I parse the document linked to the URL (from the href attribute) to get other pieces of information in those pages.
So I can imagine that it takes lot of time, but how to shut off this exception?
Here is the whole stack trace:

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read1(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.HttpURLConnection.getResponseCode(Unknown Source)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:381)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:364)
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:143)
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:132)
    at app.ForumCrawler.crawl(ForumCrawler.java:50)
    at Main.main(Main.java:15)

Thank you buddies!
sp00m

EDIT:

Hum... Sorry, just found the solution:

Jsoup.connect(url).timeout(0).get();

Hope that could be useful for someone else... :)


Source: (StackOverflow)

Advertisements

How to "scan" a website (or page) for info, and bring it into my program?

Well, I'm pretty much trying to figure out how to pull information from a webpage, and bring it into my program (in Java).

For example, if I know the exact page I want info from, for the sake of simplicity a Best Buy item page, how would I get the appropriate info I need off of that page? Like the title, price, description?

What would this process even be called? I have no idea were to even begin researching this.

Edit: Okay, I'm running a test for the JSoup(the one posted by BalusC), but I keep getting this error:

Exception in thread "main" java.lang.NoSuchMethodError: java.util.LinkedList.peekFirst()Ljava/lang/Object;
at org.jsoup.parser.TokenQueue.consumeWord(TokenQueue.java:209)
at org.jsoup.parser.Parser.parseStartTag(Parser.java:117)
at org.jsoup.parser.Parser.parse(Parser.java:76)
at org.jsoup.parser.Parser.parse(Parser.java:51)
at org.jsoup.Jsoup.parse(Jsoup.java:28)
at org.jsoup.Jsoup.parse(Jsoup.java:56)
at test.main(test.java:12)

I do have Apache Commons


Source: (StackOverflow)

how to parse a table from HTML using jsoup

<td width="10"></td>
<td width="65"><img src="/images/sparks/NIFTY.png" /></td> 
<td width="65">5,390.85</td>
<td width="65">5,428.15</td>
<td width="65">5,376.15</td>
<td width="65">5,413.85</td>

This is the HTML source from which i have to extract the values 5390.85,5428.15 , 5376.15 , 5413.85. I wanted to do this using jsoup. But i am relatively new to jsoup( today i started using it). So how should i do this?

URL url = new URL("http://www.nseindia.com/content/equities/niftysparks.htm");
Document doc = Jsoup.parse(url,3*1000);
String text = doc.body().text();

I have already extracted the content of the website using jsoup. but how to extract the values i require? Thanks in advance


Source: (StackOverflow)

How to parse data in Talend with Java (coming from a previously produced .txt file)?

I have a process in Talend which gets the search result of a page, saves the html and writes it into files, as seen here:

enter image description here

Initially I had a two step process with parsing out the date from the HTML files in Java. Here is the code: It works and writes it to a mysql database. Here is the code which basically does exactly that. (I'm a beginner, sorry for the lack of elegance)

package org.jsoup.examples;

import java.io.*;   

import org.jsoup.*;
import org.jsoup.nodes.*;
import org.jsoup.select.Elements;

import java.io.IOException;


public class parse2 {       
    static parse2 parseIt2 = new parse2();
    String companyName = "Platzhalter";
    String jobTitle = "Platzhalter";
    String location = "Platzhalter";
    String timeAdded = "Platzhalter";

    public static void main(String[] args) throws IOException {
        parseIt2.getData();
    }

    // 
    public void getData() throws IOException {
        Document document = Jsoup.parse(new File("C:/Talend/workspace/WEBCRAWLER/output/keywords_SOA.txt"), "utf-8");
        Elements elements = document.select(".joblisting");
        for (Element element : elements) {
            // Parse Data into Elements
            Elements jobTitleElement = element.select(".job_title span");
            Elements companyNameElement = element.select(".company_name span[itemprop=name]");
            Elements locationElement = element.select(".locality span[itemprop=addressLocality]");
            Elements dateElement = element.select(".job_date_added [datetime]");

            // Strip Data from unnecessary tags
            String companyName = companyNameElement.text();
            String jobTitle = jobTitleElement.text();
            String location = locationElement.text();
            String timeAdded = dateElement.attr("datetime");

            System.out.println("Firma:\t"+ companyName + "\t" + jobTitle + "\t in:\t" + location + " \t Erstellt am \t" + timeAdded );
        }  
    }
}

Now I want to do the process End-to-End in Talend, and I got assured this works. I tried this (which looks quite shady to me): enter image description here

Basically I put all imports in "advanced settings" and the code in the "basic settings" section. This importLibrary is thought to load the jsoup parsing library, as well as the mysql connect (i might to the connect with talend tools though).

Obviously this isn't working. I tried to strip the Base Code from classes and stuff and it was even worse. Can you help me how to get the generated .txt files parsed with Java here?

EDIT: Here is the Link to the talend Job http://www.share-online.biz/dl/8M5MD99NR1

EDIT2: I changed the code to the one I tried in JavaFlex. But it didn't work (the import part in the start part of the code, the rest in "body/main" and nothing in "end".


Source: (StackOverflow)

(how) can I download an image using JSoup?

I already know where the image is, but for simplicity's sake I wanted to download the image using JSoup itself. (This is to simplify getting cookies, referrer, etc.)

This is what I have so far:

//Open a URL Stream
Response resultImageResponse = Jsoup.connect(imageLocation).cookies(cookies).ignoreContentType(true).execute();

// output here
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(new java.io.File(outputFolder + name));
//BufferedWriter out = new BufferedWriter(new FileWriter(outputFolder + name));
out.write(resultImageResponse.body());          // resultImageResponse.body() is where the image's contents are.
out.close();

Source: (StackOverflow)

Jsoup select div having multiple classes

I am trying to select, using Jsoup, a <div> that has multiple classes:

<div class="content-text right-align bold-font">...</div>

The syntax for doing so, to the best of my understanding, should be:

document.select("div.content-text.right-align.bold-font");

However, for some reason, this doesn't work for me.

When I try the same exact syntax on JSFIDDLE, it works without a hitch.

Does multi-class selection work in Jsoup?

(I'd rather find out that this is a bug in my code than find out that this is a Jsoup limitation :)

UPDATE (thanks to the answer below): Jsoup works perfectly with the aforementioned syntax.


Source: (StackOverflow)

Jsoup.clean without adding html entities

I'm cleaning some text from unwanted HTML tags (such as <script>) by using

String clean = Jsoup.clean(someInput, Whitelist.basicWithImages());

The problem is that it replaces for instance å with &aring; (which causes troubles for me since it's not "pure xml").

For example

Jsoup.clean("hello å <script></script> world", Whitelist.basicWithImages())

yields

"hello &aring;  world"

but I would like

"hello å  world"

Is there a simple way to achieve this? (I.e. simpler than converting &aring; back to å in the result.)


Source: (StackOverflow)

jsoup - strip all formatting and link tags, keep text only

Let's say i have a html fragment like this:

<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>

What i want to extract from that is:

foo bar foobar baz

So my question is: how can i strip all the wrapping tags from a html and get only the text in the same order as it is in the html? As you can see in the title, i want to use jsoup for the parsing.

Example for accented html (note the 'á' character):

<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>
<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>

What i want:

Tarthatatlan biztonsági viszonyok
Tarthatatlan biztonsági viszonyok

This html is not static, generally i just want every text of a generic html fragment in decoded human readable form, width line breaks.


Source: (StackOverflow)

JSoup UserAgent, how to set it right?

I'm trying to parse the frontpage of facebook with JSoup but I always get the HTML Code for mobile devices and not the version for normal browsers(In my case Firefox 5.0).

I'm setting my User Agent like this:

doc = Jsoup.connect(url)
      .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0")
      .get();

Am I doing something wrong?

EDIT:

I just parsed http://whatsmyuseragent.com/ and it looks like the user Agent is working. Now its even more confusing for me why the site http://www.facebook.com/ returns a different version when using JSoup and my browser. Both are using the same useragent....

I noticed this behaviour on some other sites too now. If you could explain to me what the Issue is I would be more than happy.


Source: (StackOverflow)

How to parse XML with jsoup

I am trying to parse XML with jsoup, but I can't find any examples on this task.

My XML document looks like this:

<?xml version="1.0" encoding="UTF-8">
    <tests>
        <test>
            <id>xxx</id>
            <status>xxx</status>
        </test>
        <test>
            <id>xxx</id>
            <status>xxx</status>
        </test>
        ....
    </tests>
</xml>

It should be quite straightforward, but my attempt has failed.

Code:

Element content = doc.getElementById("content");
Elements tests = content.getElementsByTag("tests");
for (Element testElement : tests) {
    System.out.println(testElement.getElementsByTag("test"));
}

Source: (StackOverflow)

How can I extract only the main textual content from an HTML page?

Update

Boilerpipe appears to work really well, but I realized that I don't need only the main content because many pages don't have an article, but only links with some short description to the entire texts (this is common in news portals) and I don't want to discard these shorts text.

So if an API does this, get the different textual parts/the blocks splitting each one in some manner that differ from a single text (all in only one text is not useful), please report.


The Question

I download some pages from random sites, and now I want to analyze the textual content of the page.

The problem is that a web page have a lot of content like menus, publicity, banners, etc.

I want to try to exclude all that is not related with the content of the page.

Taking this page as example, I don't want the menus above neither the links in the footer.

Important: All pages are HTML and are pages from various differents sites. I need suggestion of how to exclude these contents.

At moment, I think in excluding content inside "menu" and "banner" classes from the HTML and consecutive words that looks like a proper name (first capital letter).

The solutions can be based in the the text content(without HTML tags) or in the HTML content (with the HTML tags)

Edit: I want to do this inside my Java code, not an external application (if this can be possible).

I tried a way parsing the HTML content described in this question : http://stackoverflow.com/questions/7035150/how-to-traverse-the-dom-tree-using-jsoup-doing-some-content-filtering


Source: (StackOverflow)

How to POST Data into website using Jsoup

I am trying to POST data into website to make a login into the site using Jsoup , but its not working ?

I am trying the code

    Document docs = Jsoup.connect("http://some.com/login")
        .data("cmd", "login","username", "xxxx","password", "yyyyy")
        .referrer("http://some.com/login/").post();

here it is giving normal page of login in pagesource

i have also tried the code

 Document docs = (Document) Jsoup.connect("http://some.com/login")
    .data("cmd", "login","username", "xxxx","password", "yyyyy")
    .referrer("http://some.com/login/").method(Method.POST).execute().parse();

here also it is giving normal page of login again in pagesource.

Any suggestions regarding the same would be highly appreciated !!

Thanks....


Source: (StackOverflow)

JSOUP select
with specific ID

I'm making a small Android application for a class where I find cancer-related events from the American Cancer Society's website. I've been using JSoup to get basic information about the events, and to get specific information from the website I've tried to use the select() method. However, the current method that I'm using grabs way more HTML nodes than I would like and I couldn't figure out why. The table that I'm trying to grab looks like this:

EDIT: I realized that the where id = "pnlResults" does not end at that table, it ends after about 3 more tables, all with information that I would like to grab. Here is the table again

    <div id="pnlResults">

        <h2><span id="lblEventName">American Cancer Society 44th Annual Walter Hagen Golf Tournament</span></h2>
        <!-- General Information Box -->
        <div class="text-box boxed wide">
            <h3 class="head" style="width:97%;">
                General Information
            </h3>
            <div class="content">


                <p>
                    <label>Event Times:</label><span id="lblStartDate">Monday, July 30, 2012</span><span id="lblEndDate"></span><br />
                    <label>&nbsp;</label><span id="lblStartTime">10:00 AM</span> - <span id="lblEndTime">9:00 PM</span>
                </p>
                <p>
                    <label>Time Zone:</label><span id="lblTimeZone">Eastern</span>

                </p>
                <p>
                    <label>Description:</label><span id="lblDesc" class="fieldData long">The American Cancer Society Walter Hagen Golf Tournament highlights the Society’s role in supporting research and patient care here in Rochester. Funds raised through this event help us make a difference in patents’ lives every day though programs including Road to Recovery and Patient Navigation as well as support grants to our research institutions.  144 golfers will play a round of golf and then enjoy cocktails, dinner, and silent auction following the tournament. </span>
                </p>
                <p>
                    <label>Agenda:</label><span id="lblAgenda" class="fieldData long">10:00am - Check-in, 11:00am - Lunch, 12:15pm - Shot gun start, 6:00 - Cocktails and silent auction, 7:00pm Dinner and program</span>
                </p>

            </div>
        </div>

        <div id="pnlStandardDisplay">


        <!-- Event Location Box -->
        <div class="text-box boxed wide line">
            <h3 class="head" style="width:97%;">
                Event Location
            </h3>
            <div class="content" style="display:inline-block; width:97%;">


                <div >
                    <div id="mapOutsideContainer" class="resource-map">
                       <div id="map_canvas" class="resource-map" ></div>
                    </div> 
                    <script  type="text/javascript">
                        var mapDataPoints = [{ "lat":43.1075545,"lng":-77.5164518, "title":"Golf Event","content":"<b>American Cancer Society 44th Annual Walter Hagen Golf Tournament<\/b><br/><\/br>4045 East Avenue<br /><br/>Rochester, New York  14618<br /><br />Phone: <br />Fax: "} ];
                        buildMap(mapDataPoints, -5);
                    </script>
                </div>

                <h4><span id="lblLocationName">Irondequoit Country Club</span></h4>
                <p>

                    <label>Address:</label><span id="lblAddress" class="fieldData" style="width:150px;">4045 East Avenue<br />Rochester, New York 14618</span>
                </p>
                <p>
                    <label nowrap="nowrap">Handicap Accessible:</label><span id="lblHandicapAccesible">Yes</span>
                </p>
            </div>

        </div>

        <!-- Primary Contact Box -->
        <div class ="line" >
        <div id="eventPrimaryContact_divContact" class="text-box boxed wide">
                    <h3 class="head" style="width:97%;">
                        Primary Contact
                    </h3>
                    <div class="content">

                        <p>

                            <label>Contact:</label><span id="eventPrimaryContact_lblContact">Katerina Kormas (<a rel='nofollow' href="mailto:katerina.kormas@cancer.org?subject=American Cancer Society 44th Annual Walter Hagen Golf Tournament">Contact ACS for Details</a>)</span>

                        </p>
                        <p>
                            <label>Contact Type:</label><span id="eventPrimaryContact_lblContactType">ACS Staff</span>
                        </p>
                        <p>

                            <label>Phone:</label><span id="eventPrimaryContact_lblContactPhone">(585) 288-1950</span>
                        </p>
                        <p>
                            <label>Additional Information:</label><span id="eventPrimaryContact_lblContactAddlInfo" class="fieldData long">Direct line is 585-224-4919 or cell 585-645-8912</span>
                        </p>
                    </div>
                </div>

        </div>

        <!-- Registration Information Box -->

        <div class="text-box boxed wide line">
            <h3 class="head" style="width:97%;">
                Registration Information
            </h3>
            <div class="content">

                <p>
                    <label nowrap="nowrap">Registration Required?: </label><span id="lblRegRequired">Yes</span>

                </p>
            </div>
        </div>       

        <!-- Event Cost Box -->
        <div class ="line" >
        <div id="eventCost_divCost" class="text-box boxed wide">
                    <h3 class="head" style="width:97%;">
                        Event Cost
                    </h3>
                    <div class="content">

                        <p>
                            <label>Cost/Registration Fee: </label><span id="eventCost_lblCostRegFee" class="fieldData long">$350 per golfer</span>
                        </p>
                        <p>
                            <label>Payment Type: </label><span id="eventCost_lblPaymentTypes" class="fieldData">Cash, Check, American Express, Mastercard, Visa, Discover</span>
                        </p>
                        <p>

                            <label>Check Payable To: </label><span id="eventCost_lblCheckPayable" class="fieldData">American Cancer Society</span>
                        </p>
                        <p>
                            <label>Memo Line: </label><span id="eventCost_lblCheckMemo" class="fieldData">American Cancer Society 44th Annual Walter Hagen Golf Tourna</span>
                        </p>
                        <p>
                            <label>Mail Check To:</label><span id="eventCost_lblCheckMailTo" class="fieldData">American Cancer Society<br />1120 South Goodman St<br />Rochester, New York 14620</span>

                        </p>
                    </div>
                </div>

        </div>

        <!-- Tax Deduction Information Box -->
        <div class="line">

                <div class="text-box boxed wide">
                    <h3 class="head" style="width:97%;">
                        Tax Deduction Information
                    </h3>

                    <div class="content">
                        <p>
                            $210  per golfer is tax deductible
                        </p>
                    </div>
                </div>  

        </div>



</div> <!-- end standard display -->
         <!-- end daffodil display -->

EDIT: Given these new tables, I would like to extract the General Information, and Event location. How would I go about doing that? Maybe using the subset of select I just got to select again Where the headers are what I want?

The code where I'm using the select() is shown below. As I said before, I tried to use

select("div[id=pnlResults]);

but the returned data is much more than just the div where the id is pnlResults.

public ArrayList<Event> results()
{
    ArrayList<Event> results = new ArrayList<Event>();
    Document doc = Jsoup.parse(page);
    Elements links = doc.select("a[href*=event-details]");

    for(Element e: links)
    {
        String title = e.text();
        String link = "http://www.cancer.org/involved/participate/app/"+e.attr("href");
        try{
            Document eventInfo = Jsoup.connect(link).get();
            Elements info = eventInfo.select("div[id*=pnlResults");


        }
        catch(MalformedURLException exception)
        {
            exception.printStackTrace();
        }
        catch(IOException exception)
        {
            exception.printStackTrace();
        }

    }
    return results;
}

Any help would be greatly appreciated.


Source: (StackOverflow)

Selecting only from child nodes using Jsoup?

I'm currently working with a <ul> element with a lot of first-level <li> elements. I want to get those elements and only those elements. However, when I get them either using Jsoup selector or getElementsByTag, it returns also <li> elements inside those first-level <li> elements.

How do I do it such that I only get the first-level <li> elements?

Here's the code:

Elements bundleList =  indieGala.select("section.games_bundle_box2")
                        .get(0).select("ul.unlock")
                        .get(0).getElementsByTag("li");

Here's the the html:

<section class="games_bundle_box2">
  <div class="games-container">

    <!-- List Game Unlocked -->
    <ul class="unlock">

      <!-- Item -->
      <li>
        <!-- Preview Thumb -->
        <a rel='nofollow' href="#game1" class="fancybox-various" title="Desura &amp; Steam for Windows and Mac - This game has been GreenLighted on Steam and all buyers of The IndieGala Flashpoint bundle will receive Steam keys in a few weeks!">
          <span class="tier1">
            Pay minimum 
            <em class="color-text">
              $1
            </em>
            to get Steam &amp; Desura keys! 
          </span>
          <span class="boxed">
          </span>
          <span class="steam-temp">
          </span>
          <span class="desura-icon">
          </span>
          <img src="img_game/ig-flashpoint/knytt.jpg" alt="">
          <!-- 110 x 110 -->
          <span class="item-title">
            Knytt Underground
          </span>
        </a>
        <!-- End Preview Thumb -->

        <!-- Pop-Up -->

        <div id="game1" class="modal_content">

          <!-- Video Game Box -->
          <div class="game_movie">
            <iframe width="488" height="300" src="http://www.youtube.com/embed/NwZ2Z7WRQrI?rel=0&amp;vq=hd720" frameborder="0" allowfullscreen="">
            </iframe>
          </div>
          <!-- End Video Game Box -->

          <!-- Game Description -->
          <div class="game_description">
            <h2>
              <a rel='nofollow' href="http://www.desura.com/games/knytt-underground" target="_blank">
                Knytt Underground
              </a>
            </h2>
            <a rel='nofollow' href="http://nifflas.ni2.se/" target="_blank">
              Nifflas' Games
            </a>
            <p style="font-weight: bold;">
              IMPORTANT NOTE: This game has been accepted on Steam. As soon as it will available on the Steam store, all buyers will receive a Steam key for it.
            </p>
            <p>
              Immerse yourself in a unique and challenging underground adventure!
            </p>
            <p>
              Knytt Underground is the latest iteration in the critically acclaimed Knytt series. It takes place in the same universe as Knytt Stories, the renowned indie game from Nicklas Nygren, a.k.a. 'Nifflas'.
            </p>
            <p>
              Each room in the huge map offers a small challenge to overcome using the unique tried and tested mechanics that have already reached over 1 million fans worldwide. Blending zen-like gameplay; enjoy an unparalled sense of freedom by running, jumping, climbing, swinging and bouncing. Knytt Underground delivers a unique and captivating, platform adventure experience allowing you to explore over 1,800 rooms and complete multiple story-driven quests. 
            </p>
            <p>
              <a rel='nofollow' href="#" target="_blank">
                System requirements
              </a>
            </p>
            <p>
              Operating system: Windows (XP / Vista / 7 / 8) or Mac OS 10.6
              <br>
              OpenGL compatible graphics card with 512MB memory or more.
              <br>
              A 2ghz CPU is needed.
              <br>
              The OS X version requires Mac OS 10.6 and must be running in 64-bit mode.
              <br>
            </p>
          </div>
        </div>
        <!-- End Pop-Up -->
      </li>
      <!-- End Item -->

      <li>
        <a rel='nofollow' href="#game2" class="fancybox-various" title="Steam for Windows">
          <span class="boxed">
          </span>
          <span class="steam-icon">
          </span>
          <img src="img_game/ig-flashpoint/saira.jpg" alt="">
          <span class="item-title">
            Saira
          </span>
        </a>
        <div id="game2" class="modal_content">
          <div class="game_movie">
            <iframe width="488" height="300" src="http://www.youtube.com/embed/iFPaXcLF5b0?rel=0&amp;vq=hd720" frameborder="0" allowfullscreen="">
            </iframe>
          </div>
          <div class="game_description">
            <h2>
              <a rel='nofollow' href="http://store.steampowered.com/app/48900/" target="_blank">
                Saira
              </a>
            </h2>
            <a rel='nofollow' href="http://nifflas.ni2.se/" target="_blank">
              Nifflas' Games
            </a>
            <p>
              Saira is a puzzle platformer with non-linear gameplay and a whole universe for you to explore. The game is heavily influenced by classic puzzle adventure games and uses a new unique graphical style combining high resolution photography into a lush and mysterious world.
            </p>
            <p>
              The eponymous Saira is a photographer who specializes in digitally capturing dangerous places and animals across the universe. For reasons unknown, she finds herself as the only remaining person in the entire galaxy. Saira has no weapons, she will use only her mind and agility to progress through seven star systems and over 60 well-crafted puzzles. Over two hours of originally-scored music will help her maintain focus and unlock one of six vastly unique endings.
            </p>
            <ul>
              <li>
                Over 60 well-crafted puzzels.
              </li>
              <li>
                A universe full of surprising creatures and locations for you to explore.
              </li>
              <li>
                11 layers of high definition parallax scrolling and a two hour soundtrack gives the universe of Saira it's unique atmosphere.
              </li>
              <li>
                Non-linear gameplay
              </li>
              <li>
                Multiple endings
              </li>
            </ul>
            <p>
              <a rel='nofollow' href="#" target="_blank">
                System requirements
              </a>
            </p>
            <p>
              OS: Windows 2000 or later
              <br>
              Processor: 2.1Ghz or higher
              <br>
              DirectX®: 9
              <br>
              Hard Drive: 250 MB for downloading the game + 200 MB for playing
              <br>
            </p>
          </div>
        </div>
      </li>
      <!-- End Item -->

      <!-- Item -->
      <li>
        <!-- Preview Thumb -->
        <a rel='nofollow' href="#game3" class="fancybox-various" title="Steam for Windows">
          <span class="boxed">
          </span>
          <span class="steam-icon">
          </span>
          <img src="img_game/ig-flashpoint/musaic.jpg" alt="">
          <!-- 110 x 110 -->
          <span class="item-title">
            Musaic Box
          </span>
        </a>
        <!-- End Preview Thumb -->

        <!-- Pop-Up -->
        <div id="game3" class="modal_content">

          <!-- Video Game Box -->
          <div class="game_movie">
            <iframe width="488" height="300" src="http://www.youtube.com/embed/ZswOQE8MDbo?rel=0&amp;vq=hd720" frameborder="0" allowfullscreen="">
            </iframe>
          </div>
          <!-- End Video Game Box -->

          <!-- Game Description -->
          <div class="game_description">
            <h2>
              <a rel='nofollow' href="http://store.steampowered.com/app/29130/" target="_blank">
                Musaic Box
              </a>
            </h2>
            <a rel='nofollow' href="http://kranx.com/en/" target="_blank">
              KranX Productions
            </a>
            <br>
            <br>
            <p>
              Uncover all of your grandfather's sheet music, hidden in his home amongst a treasure trove of gorgeous antiques and musical relics. Melodious music box games will let you piece these special compositions together and unleash their symphonious secrets. Unlock Creative Mode and write your own outstanding arrangements. With a house full of secrets and a box full of music the aural excitement never ends.
            </p>
            <ul>
              <li>
                Beautifully rendered graphics
              </li>
              <li>
                Entrancing musical score
              </li>
              <li>
                Unlock musical mysteries!
              </li>
            </ul>
            <p>
              <a rel='nofollow' href="#" target="_blank">
                System requirements
              </a>
            </p>
            <p>
              Supported OS: Microsoft® Windows® 2000/XP/Vista
              <br>
              Processor: 800Mhz
              <br>
              Graphics: DirectX® compatible with 16 MB of Video Memory
              <br>
              Sound: DirectX® compatible Sound Card
              <br>
              DirectX® Version: DirectX 8.0
              <br>
              Memory: 256 MB RAM (512+MB recommended)
              <br>
              Hard Drive: 54 MB or more
              <br>
            </p>
          </div>
          <!-- End Game Description -->

        </div>
        <!-- End Pop-Up -->

      </li>
      <!-- End Item -->

      <!-- Item -->
      <li>
        <!-- Preview Thumb -->
        <a rel='nofollow' href="#game4" class="fancybox-various" title="Steam for Windows">
          <span class="boxed">
          </span>
          <span class="steam-icon">
          </span>
          <img src="img_game/ig-flashpoint/yumsters.jpg" alt="">
          <!-- 110 x 110 -->
          <span class="item-title">
            Yumsters 2: Around the World
          </span>
        </a>
        <!-- End Preview Thumb -->

        <!-- Pop-Up -->
        <div id="game4" class="modal_content">

          <!-- Video Game Box -->
          <div class="game_movie">
            <iframe width="488" height="300" src="http://www.youtube.com/embed/m19AcPO_LMQ?rel=0&amp;vq=hd720" frameborder="0" allowfullscreen="">
            </iframe>
          </div>
          <!-- End Video Game Box -->

          <!-- Game Description -->
          <div class="game_description">
            <h2>
              <a rel='nofollow' href="http://store.steampowered.com/app/29120/" target="_blank">
                Yumsters 2: Around the World
              </a>
            </h2>
            <a rel='nofollow' href="http://kranx.com/en/" target="_blank">
              KranX Productions
            </a>
            <p>
              Not only are these Yumsters crazy for strawberries, they can rock the bongos. For the love of fruity music, help them earn money by cleaning gardens to promote their band. To really skyrocket, Yumsters need the best equipment to win the ultimate grand prize at the fairy town music showdown. Get fruitilicious in five vibrant locations of Yumsters 2, a sweet Match 3 puzzler. 
            </p>
            <p>
              Key Features:
            </p>
            <ul>
              <li>
                Match 3, drag-n-drop 
              </li>
              <li>
                Rhythm-based gameplay 
              </li>
              <li>
                Adorable characters 
              </li>
              <li>
                Win the grand prize! 
              </li>
            </ul>
            <p>
              <a rel='nofollow' href="#" target="_blank">
                System requirements
              </a>
            </p>
            <p>
              Operating System: Microsoft® Windows® XP/Vista
              <br>
              Processor: 600 Mhz
              <br>
              Memory: 256 MB (512+ MB recommended)
              <br>
              Hard Disk Space: 54 MB (or More) Available HDD Space
              <br>
              Video Card: DirectX® compatible with 16 MB of Video Memory
              <br>
              Sound Card: DirectX® compatible Sound Card
              <br>
              DirectX® Version: DirectX® 7.0
              <br>
            </p>
          </div>
          <!-- End Game Description -->

        </div>
        <!-- End Pop-Up -->
      </li>
      <!-- End Item -->      
<li style="width: 400px;font-weight: bold; margin-top: 20px; position: relative; left: 210px; font-size: 16px;">
Price BLOCKED at 
<span class="color-text">
$3.99
</span>
for the FIRST 8 HOURS
</li>
-->
          </ul>

          <!-- End List Game Locked -->

  </div>
</section>

Source: (StackOverflow)