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

Python采集騰訊新聞實(shí)例

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

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

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

步驟1:將主頁(yè)上所有鏈接爬取出來(lái),寫到文件里。

python在獲取html方面十分方便,寥寥數(shù)行代碼就可以實(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,而且也寫出來(lái)了。但是它有一個(gè)問(wèn)題,就是遇到中文字符的時(shí)候無(wú)法處理。

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

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

后來(lái)使用了SGMLParser,它就沒(méi)有這個(gè)問(wèn)題。
復(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針對(duì)某個(gè)標(biāo)簽都需要重載它的函數(shù),這里是把所有的鏈接放到該類的urls里。

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

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

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

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

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

fout.close()

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

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

很簡(jiǎn)單,只需要打開urls.txt文件,一行一行地讀出來(lái)就可以了。

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

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

這里有幾個(gè)新的用法:

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

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

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

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

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

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

下面的方法是用來(lái)遍歷文件夾的。

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

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

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

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

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

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

其實(shí)這個(gè)并不能匹配到騰訊網(wǎng)的所有新聞,因?yàn)樯厦娴男侣動(dòng)袃煞N格式,標(biāo)簽有一點(diǎn)差別,所以只能提取出一種。

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

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

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

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

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

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

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

注意:

1、打開某個(gè)網(wǎng)址的時(shí)候,如果網(wǎng)址是壞的(打不開),若不處理則會(huì)報(bào)錯(cuò)。我簡(jiǎn)單地使用處理異常的方式,估計(jì)應(yīng)該有其他方式。

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

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

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

3、如何去除字符串末尾的“\n”?python的處理簡(jiǎn)直優(yōu)雅到死?。?/p>

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

相關(guān)文章

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

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

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

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

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

    python fuzzywuzzy模塊模糊字符串匹配詳細(xì)用法

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

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

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

    Python 高效編程技巧分享

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

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

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

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

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

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

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

    Python實(shí)用工具FuckIt.py介紹

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

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

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

最新評(píng)論