最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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 值。

查閱了資料,一開(kāi)始我打算用HTMLParser,而且也寫(xiě)出來(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ù),這里是把所有的鏈接放到該類(lèi)的urls里。

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

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

fout = file('urls.txt', 'w')#要把鏈接寫(xiě)到這個(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)單,只需要打開(kāi)urls.txt文件,一行一行地讀出來(lái)就可以了。

也許這里會(huì)顯得多此一舉,但是基于我對(duì)解耦的強(qiáng)烈愿望,我還是果斷地寫(xiě)到文件里了。后面如果采用面向?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、打開(kāi)某個(gè)網(wǎng)址的時(shí)候,如果網(wǎng)址是壞的(打不開(kāi)),若不處理則會(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)雅到死??!

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

相關(guān)文章

  • python字典的setdefault的巧妙用法

    python字典的setdefault的巧妙用法

    這篇文章主要介紹了python字典的setdefault的巧妙用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python中裝飾器的基本功能理解

    Python中裝飾器的基本功能理解

    裝飾器本質(zhì)上是一個(gè)Python函數(shù),它可以讓其他函數(shù)在不需要做任何代碼變動(dòng)的前提下增加額外功能,下面這篇文章主要給大家介紹了關(guān)于Python中裝飾器的基本功能,需要的朋友可以參考下
    2021-10-10
  • python 通過(guò) socket 發(fā)送文件的實(shí)例代碼

    python 通過(guò) socket 發(fā)送文件的實(shí)例代碼

    這篇文章主要介紹了python 通過(guò) socket 發(fā)送文件的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • 基于Python的數(shù)據(jù)分析與可視化

    基于Python的數(shù)據(jù)分析與可視化

    在當(dāng)今數(shù)字化時(shí)代,數(shù)據(jù)分析和可視化已經(jīng)成為了企業(yè)和個(gè)人必備的技能,Python 作為一種高級(jí)編程語(yǔ)言,具有易學(xué)易用、高效快捷的特點(diǎn),在數(shù)據(jù)科學(xué)領(lǐng)域中得到了廣泛應(yīng)用,本篇文章將介紹基于 Python 的數(shù)據(jù)分析與可視化
    2023-07-07
  • 對(duì)python插入數(shù)據(jù)庫(kù)和生成插入sql的示例講解

    對(duì)python插入數(shù)據(jù)庫(kù)和生成插入sql的示例講解

    今天小編就為大家分享一篇對(duì)python插入數(shù)據(jù)庫(kù)和生成插入sql的示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Python命令行解析模塊詳解

    Python命令行解析模塊詳解

    這篇文章主要介紹了Python命令行解析模塊詳解,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • python調(diào)用api實(shí)例講解

    python調(diào)用api實(shí)例講解

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python調(diào)用api實(shí)例講解內(nèi)容,有興趣的朋友們可以參考下。
    2021-04-04
  • python創(chuàng)建臨時(shí)文件夾的方法

    python創(chuàng)建臨時(shí)文件夾的方法

    這篇文章主要介紹了python創(chuàng)建臨時(shí)文件夾的方法,涉及Python基于tempfile模塊創(chuàng)建臨時(shí)文件夾的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-07-07
  • python進(jìn)程的狀態(tài)、創(chuàng)建及使用方法詳解

    python進(jìn)程的狀態(tài)、創(chuàng)建及使用方法詳解

    這篇文章主要介紹了python進(jìn)程的狀態(tài)、創(chuàng)建及使用方法,結(jié)合實(shí)例形式詳細(xì)分析了Python進(jìn)程的概念、原理、工作狀態(tài)、創(chuàng)建以及使用方法,需要的朋友可以參考下
    2019-12-12
  • Django項(xiàng)目如何正確配置日志(logging)

    Django項(xiàng)目如何正確配置日志(logging)

    本文將教你如何在Django項(xiàng)目中正確配置日志(logging),讓Django生成log日志文件,并在程序運(yùn)行發(fā)生error級(jí)別故障時(shí)通知管理員。
    2021-04-04

最新評(píng)論

天峨县| 项城市| 巴南区| 张家口市| 安塞县| 雷波县| 舟山市| 上高县| 河源市| 寿光市| 陇西县| 乳源| 昌宁县| 长乐市| 收藏| 巴中市| 青阳县| 辰溪县| 张家口市| 安徽省| 保亭| 南部县| 绩溪县| 邯郸市| 宿迁市| 邵武市| 双流县| 梅州市| 灵山县| 玉树县| 社会| 车致| 福泉市| 桂平市| 霸州市| 顺平县| 清苑县| 喀喇沁旗| 贵定县| 开原市| 庆安县|