欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python采集騰訊新聞實例

 更新時間:2014年07月10日 11:41:14   投稿:junjie  
這篇文章主要介紹了Python采集騰訊新聞實例,一個簡單的例子,著重于實現(xiàn)步驟的講解,需要的朋友可以參考下

目標(biāo)是把騰訊新聞主頁上所有新聞爬取下來,獲得每一篇新聞的名稱、時間、來源以及正文。

接下來分解目標(biāo),一步一步地做。

步驟1:將主頁上所有鏈接爬取出來,寫到文件里。

python在獲取html方面十分方便,寥寥數(shù)行代碼就可以實現(xiàn)我們需要的功能。

復(fù)制代碼 代碼如下:
def getHtml(url):
     page = urllib.urlopen(url)
     html = page.read()
     page.close()
     return html

我們都知道html鏈接的標(biāo)簽是“a”,鏈接的屬性是“href”,也就是要獲得html中所有tag=a,attrs=href 值。

查閱了資料,一開始我打算用HTMLParser,而且也寫出來了。但是它有一個問題,就是遇到中文字符的時候無法處理。

復(fù)制代碼 代碼如下:

 class parser(HTMLParser.HTMLParser):
     def handle_starttag(self, tag, attrs):
             if tag == 'a':
             for attr, value in attrs:
                 if attr == 'href':
                     print value

后來使用了SGMLParser,它就沒有這個問題。
復(fù)制代碼 代碼如下:

class URLParser(SGMLParser):      
        def reset(self):
                SGMLParser.reset(self)
                self.urls = []
 
        def start_a(self,attrs):       
                href = [v for k,v in attrs if k=='href']         
                if href:
                        self.urls.extend(href)

SGMLParser針對某個標(biāo)簽都需要重載它的函數(shù),這里是把所有的鏈接放到該類的urls里。

復(fù)制代碼 代碼如下:

lParser = URLParser()#分析器來的
socket = urllib.urlopen("http://news.qq.com/")#打開這個網(wǎng)頁

fout = file('urls.txt', 'w')#要把鏈接寫到這個文件里
lParser.feed(socket.read())#分析啦

reg = 'http://news.qq.com/a/.*'#這個是用來匹配符合條件的鏈接,使用正則表達式匹配
pattern = re.compile(reg)

for url in lParser.urls:#鏈接都存在urls里
    if pattern.match(url):
        fout.write(url+'\n')

fout.close()

這樣子就把所有符合條件的鏈接都保存到urls.txt文件里了。

步驟2:對于每一個鏈接,獲取它的網(wǎng)頁內(nèi)容。

很簡單,只需要打開urls.txt文件,一行一行地讀出來就可以了。

也許這里會顯得多此一舉,但是基于我對解耦的強烈愿望,我還是果斷地寫到文件里了。后面如果采用面向?qū)ο缶幊?,重?gòu)起來是十分方便的。

獲取網(wǎng)頁內(nèi)容部分也是相對簡單的,但是需要把網(wǎng)頁的內(nèi)容都保存到一個文件夾里。

這里有幾個新的用法:

復(fù)制代碼 代碼如下:

os.getcwd()#獲得當(dāng)前文件夾路徑
os.path.sep#當(dāng)前系統(tǒng)路徑分隔符(是這個叫法嗎?)windows下是“\”,linux下是“/”

#判斷文件夾是否存在,如果不存在則新建一個文件夾
if os.path.exists('newsdir') == False:
    os.makedirs('newsdir')

#str()用來將某個數(shù)字轉(zhuǎn)為字符串
i = 5
str(i)

有了這些方法,將字符串保存到某個文件夾下不同的文件就不再是一件困難的事了。

步驟3:枚舉每一個網(wǎng)頁,根據(jù)正則匹配獲得目標(biāo)數(shù)據(jù)。

下面的方法是用來遍歷文件夾的。

復(fù)制代碼 代碼如下:

 #這個是用來遍歷某個文件夾的
 for parent, dirnames, filenames in os.walk(dir):
     for dirname in dirnames
         print parent, dirname
     for filename in filenames:
         print parent, filename

遍歷,讀取,匹配,結(jié)果就出來了。

我使用的數(shù)據(jù)提取的正則表達式是這樣的:

復(fù)制代碼 代碼如下:

reg = '<div class="hd">.*?<h1>(.*?)</h1>.*?<span class="pubTime">(.*?)</span>.*?<a .*?>(.*?)</a>.*?<div id="Cnt-Main-Article-QQ" .*?>(.*?)</div>'

其實這個并不能匹配到騰訊網(wǎng)的所有新聞,因為上面的新聞有兩種格式,標(biāo)簽有一點差別,所以只能提取出一種。

另外一點就是通過正則表達式的提取肯定不是主流的提取方法,如果需要采集其他網(wǎng)站,就需要變更正則表達式,這可是一件比較麻煩的事情。

提取之后觀察可知,正文部分總是會參雜一些無關(guān)信息,比如“<script>...</script>”“<p></p>”等等。所以我再通過正則表達式將正文切片。

復(fù)制代碼 代碼如下:

def func(str):#誰起的這個名字
    strs = re.split("<style>.*?</style>|<script.*?>.*?</script>|&#[0-9]+;|<!--\[if !IE\]>.+?<!\[endif\]-->|<.*?>", str)#各種匹配,通過“|”分隔
    ans = ''
    #將切分的結(jié)果組合起來
    for each in strs:
        ans += each
    return ans

這樣騰訊網(wǎng)上面的正文基本全部能夠提取出來。

到此整個采集也就結(jié)束了。

展示一下我提取到的結(jié)果(不使用自動換行,右邊隱藏了):

注意:

1、打開某個網(wǎng)址的時候,如果網(wǎng)址是壞的(打不開),若不處理則會報錯。我簡單地使用處理異常的方式,估計應(yīng)該有其他方式。

復(fù)制代碼 代碼如下:

try:
    socket = urllib.urlopen(url)
except:
    continue

2、Python正則表達式中的“.”號,可以匹配任意字符,但是除了“\n”。

3、如何去除字符串末尾的“\n”?python的處理簡直優(yōu)雅到死啊!

復(fù)制代碼 代碼如下:
if line[-1] == '\n':
    line = line[0:-1]

相關(guān)文章

  • Pandas讀取并修改excel的示例代碼

    Pandas讀取并修改excel的示例代碼

    這篇文章主要介紹了Pandas讀取并修改excel的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • python 多進程并行編程 ProcessPoolExecutor的實現(xiàn)

    python 多進程并行編程 ProcessPoolExecutor的實現(xiàn)

    這篇文章主要介紹了python 多進程并行編程 ProcessPoolExecutor的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • python fuzzywuzzy模塊模糊字符串匹配詳細用法

    python fuzzywuzzy模塊模糊字符串匹配詳細用法

    這篇文章主要介紹了使用Python完成公司名稱和地址的模糊匹配的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 關(guān)于Python作用域自學(xué)總結(jié)

    關(guān)于Python作用域自學(xué)總結(jié)

    在本文里我們給大家整理了關(guān)于python自學(xué)作用域的相關(guān)知識點以及實例代碼,需要的朋友們跟著學(xué)習(xí)下。
    2019-06-06
  • Python 高效編程技巧分享

    Python 高效編程技巧分享

    工作中經(jīng)常要處理各種各樣的數(shù)據(jù),遇到項目趕進度的時候自己寫函數(shù)容易浪費時間。Python 中有很多內(nèi)置函數(shù)幫你提高工作效率。
    2020-09-09
  • 詳解Python中的動態(tài)屬性和特性

    詳解Python中的動態(tài)屬性和特性

    本篇文章主要介紹了詳解Python中的動態(tài)屬性和特性,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • python中使用numpy包的向量矩陣相乘np.dot和np.matmul實現(xiàn)

    python中使用numpy包的向量矩陣相乘np.dot和np.matmul實現(xiàn)

    本文主要介紹了python中使用numpy包的向量矩陣相乘np.dot和np.matmul實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python實現(xiàn)畫圖工具

    python實現(xiàn)畫圖工具

    這篇文章主要為大家詳細介紹了python實現(xiàn)畫圖工具,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Python實用工具FuckIt.py介紹

    Python實用工具FuckIt.py介紹

    這篇文章主要介紹了Python實用工具FuckIt.py介紹,FuckIt.py 使用了最先進的技術(shù)能夠使你的代碼不管里面有什么樣的錯誤,你只管 FuckIt,程序就能“正?!眻?zhí)行,兵來將擋水來土掩,需要的朋友可以參考下
    2019-07-07
  • python神經(jīng)網(wǎng)絡(luò)使用tensorflow實現(xiàn)自編碼Autoencoder

    python神經(jīng)網(wǎng)絡(luò)使用tensorflow實現(xiàn)自編碼Autoencoder

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)使用tensorflow實現(xiàn)自編碼Autoencoder,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05

最新評論