This proof is an extended version of the nice proof proposed by
Stromael and it serves best for beginners who want to understand every detail(that one that for any established mathematician logically seems trivial) of the proof.
$ \textbf{Proof:} $
Let $U \subseteq \mathbb{R}$ be open and let $x \in U$. Then Either $x$ is rational or $x$ is irrational.
Suppose $x$ is rational, then define
\begin{align} I_x = \bigcup\limits_{\substack{I\text{ an open interval} \\ x~\in~I~\subseteq~U}} I,\end{align}
Claim: $I_x$ is interval, $I_x$ is open and $ I_x \subseteq U $
Definition: An interval is a subset $ I \subseteq \mathbb{R}$ such that, for all $ a<c<b$ in $\mathbb{R}$, if $ a,b \in I $ then $ c \in I$.
Now, consider any $ a<c<b $ such that $ a,b \in I_x$. We want to show that $ c \in I_x $.
Denote $I_a $ to be an interval such that $ x \in I_a $ and $ a \in I_a $. In other words $ I_a $ is one of the intervals from the union $ I_x $ that contains $a$. In the same way, let $ I_b $ be the interval such that $ x \in I_b $ and $ b \in I_b $.
$ c=x $: If $c=x$ then by construction of $I_x$, $ c \in I_x$
$ c<x $: If $c<x$ then we have that either $ a<c<x<b $ or $ a<c<b<x $. Since $ x \in I $ for every open interval $I$ of the union $I_x$ (by construction of $I_x$ ), we have that $x \in I_a $ and $ x \in I_b$. Since $ x \in I_a $ then because $ I_a $ is an interval $ c \in I_a$ and hence $ c \in I_x $. And since $ x \in I_b $ then because $ I_b $ is an interval $ c \in I_b $ and hence $ c \in I_x $. Thus, we concluded that $ c \in I_x $.
$ c > x $: If $ c>x $ then we have that either $ a<x<c<b $ or $ x<a<c<b $. Since $ x \in I $ for every open interval $I$ of the union $I_x$ (by construction of $I_x$ ), we have that $x \in I_a $ and $ x \in I_b$. Since $ x \in I_b $ then because $ I_b $ is an interval $ c \in I_b $ and hence $ c \in I_x $. As for the second case, note that since $ x \in I_b$ we have that $ a \in I_b $. But then, because $ I_b $ is an interval we have that $ c \in I_b $ and hence $ c \in I_x$. Hence we concluded that $ c \in I_x $.
This Proves that $ I_x $ is an interval.
$ I_x $ is open because it is union of open sets.
$ I_x \subseteq U $ by construction.
Suppose $x$ is irrational, then by openness of $ U $ there is $\varepsilon > 0$ such that $(x - \varepsilon, x + \varepsilon) \subseteq U$, and by the property of real numbers that for any irrational number there exists a sequence of rational unmbers that converges to that irrational number, there exists rational $y \in (x - \varepsilon, x + \varepsilon) $. Then by construction $ (x - \varepsilon, x + \varepsilon) \subseteq I_y $. Hence $x \in I_y$. So any $x \in U$ is in $I_q$ for some $q \in U \cap \mathbb{Q}$, and so
\begin{align}U \subseteq \bigcup\limits_{q~\in~U \cap~\mathbb{Q}} I_q.\end{align}
But $I_q \subseteq U$ for each $q \in U \cap \mathbb{Q}$; thus
\begin{align}U = \bigcup\limits_{q~\in~U \cap~\mathbb{Q}} I_q, \end{align}
which is a countable union of open intervals.
Now let's show that intervals $ \{I_q \} ~\ q \in U \cap \mathbb{Q} $ are disjoint. Suppose there is $ i, j, \in U \cap \mathbb{Q} $ such that $ I_i \cap I_j \neq \emptyset $ then $ I_i \subseteq I_q $ and $ I_j \subseteq I_q $ for some $ q \in U \cap \mathbb{Q} $
Hence we constructed disjoint intervals $ \{I_q \} ~\ q \in U \cap \mathbb{Q} $ that are enumerated by rational numbers in $U$ and whose union is $U$. Since any subset of rational numbers is countable, $ \{I_q \} ~\ q \in U \cap \mathbb{Q} $ is countable as well. This finishes the proof.