天天看點

Python基于urllib,re爬取百度的國内即時新聞

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>'&lt;div id="instant-news.*?&lt;/div&gt;'</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>'&lt;li&gt;&lt;a.*?&gt;(.*?)&lt;/a&gt;&lt;/li&gt;'</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,如需轉載請自行聯系原作者