Python應用于爬蟲領域業界已經相當的廣泛了,今天就采用urllib + re 爬取下百度國内即時新聞。
軟體環境:
Python : 3.6.0
PyCharm: Community 2017.2
Python 下載下傳位址 https://www.python.org/downloads/
Pycharm 下載下傳位址(Community是免費的) https://www.jetbrains.com/pycharm/download/#section=windows
主要思路:
采用urllib請求制定url,拿到網頁的html,然後采用re進行正則比對找到新聞标題
爬取過程:
1. 導入urllib 和 re 兩個子產品
1
2
3
<code>import</code> <code>urllib</code>
<code>from</code> <code>urllib </code><code>import</code> <code>request</code>
<code>import</code> <code>re</code>
2. 采用urllib.request.urlopen 打開百度資訊url,并取得所有html
<code>url </code><code>=</code> <code>"http://news.baidu.com/guonei"</code>
<code>response </code><code>=</code> <code>urllib.request.urlopen(url)</code>
<code>html </code><code>=</code> <code>response.read().decode(</code><code>'utf-8'</code><code>)</code>
urllib.urlopen()方法用于打開一個url位址。
read()方法用于讀取URL上的資料,并把整個頁面下載下傳下來。
3. 在Chrome中按F12可以檢視到網頁的源代碼,可以看到新聞位于 div id="instant-news"下面
4. 擷取即時資訊的整個div的html并存儲到變量: instant_news_html
<code>pattern_of_instant_news </code><code>=</code> <code>re.</code><code>compile</code><code>(</code><code>'<div id="instant-news.*?</div>'</code><code>,re.S)</code>
<code>instant_news_html </code><code>=</code> <code>re.findall(pattern_of_instant_news, html)[</code><code>0</code><code>]</code>
5. 從全部news的html中比對出每一個新聞标題
4
<code>pattern_of_news </code><code>=</code> <code>re.</code><code>compile</code><code>(</code><code>'<li><a.*?>(.*?)</a></li>'</code><code>, re.S)</code>
<code>news_list </code><code>=</code> <code>re.findall(pattern_of_news, instant_news_html)</code>
<code>for</code> <code>news </code><code>in</code> <code>news_list:</code>
<code> </code><code>print</code><code>(news)</code>
将會看到如入結果
完整源代碼:
5
6
7
8
9
10
11
12
13
14
15
16
<code></code>
本文轉自 yuanzhitang 51CTO部落格,原文連結:http://blog.51cto.com/yuanzhitang/2057777,如需轉載請自行聯系原作者