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

python多線程抓取天涯帖子內(nèi)容示例

 更新時(shí)間:2014年04月03日 10:21:45   作者:  
這篇文章主要介紹了python多線程抓取天涯帖子內(nèi)容示例,需要的朋友可以參考下

使用re, urllib, threading 多線程抓取天涯帖子內(nèi)容,設(shè)置url為需抓取的天涯帖子的第一頁(yè),設(shè)置file_name為下載后的文件名

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

#coding:utf-8

import urllib
import re
import threading
import os, time

class Down_Tianya(threading.Thread):
    """多線程下載"""
    def __init__(self, url, num, dt):
        threading.Thread.__init__(self)
        self.url = url
        self.num = num
        self.txt_dict = dt

    def run(self):
        print 'downling from %s' % self.url
        self.down_text()

    def down_text(self):
        """根據(jù)傳入的url抓出各頁(yè)內(nèi)容,按頁(yè)數(shù)做鍵存入字典"""
        html_content =urllib.urlopen(self.url).read()
        text_pattern = re.compile('<span>時(shí)間:(.*?)</span>.*?<!-- <div class="host-ico">樓主</div> -->.*?<div class="bbs-content.*?>\s*(.*?)</div>', re.DOTALL)
        text = text_pattern.findall(html_content)
        text_join = ['\r\n\r\n\r\n\r\n'.join(item) for item in text]
        self.txt_dict[self.num] = text_join

 



def page(url):
    """根據(jù)第一頁(yè)地址抓取總頁(yè)數(shù)"""
    html_page = urllib.urlopen(url).read()
    page_pattern = re.compile(r'<a href="\S*?">(\d*)</a>\s*<a href="\S*?" class="\S*?">下頁(yè)</a>')
    page_result = page_pattern.search(html_page)
    if page_result:
        page_num = int(page_result.group(1))
        return page_num

 

def write_text(dict, fn):
    """把字典內(nèi)容按鍵(頁(yè)數(shù))寫(xiě)入文本,每個(gè)鍵值為每頁(yè)內(nèi)容的list列表"""
    tx_file = open(fn, 'w+')
    pn = len(dict)
    for i in range(1, pn+1):
        tx_list = dict[i]
        for tx in tx_list:
            tx = tx.replace('<br>', '\r\n').replace('<br />', '\r\n').replace('&nbsp;', '')
            tx_file.write(tx.strip()+'\r\n'*4)
    tx_file.close()


def main():
    url = 'http://bbs.tianya.cn/post-16-996521-1.shtml'
    file_name ='abc.txt'
    my_page = page(url)
    my_dict = {}

    print 'page num is : %s' % my_page

    threads = []

    """根據(jù)頁(yè)數(shù)構(gòu)造urls進(jìn)行多線程下載"""
    for num in range(1, my_page+1):
        myurl = '%s%s.shtml' % (url[:-7], num)
        downlist = Down_Tianya(myurl, num, my_dict)
        downlist.start()
        threads.append(downlist)

    """檢查下載完成后再進(jìn)行寫(xiě)入"""
    for t in threads:
        t.join()

    write_text(my_dict, file_name)

    print 'All download finished. Save file at directory: %s' % os.getcwd()

if __name__ == '__main__':
    main()

down_tianya.py

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

#coding:utf-8

import urllib
import re
import threading
import os

class Down_Tianya(threading.Thread):
    """多線程下載"""
    def __init__(self, url, num, dt):
        threading.Thread.__init__(self)
        self.url = url
        self.num = num
        self.txt_dict = dt

    def run(self):
        print 'downling from %s' % self.url
        self.down_text()

    def down_text(self):
        """根據(jù)傳入的url抓出各頁(yè)內(nèi)容,按頁(yè)數(shù)做鍵存入字典"""
        html_content =urllib.urlopen(self.url).read()
        text_pattern = re.compile('<div class="atl-item".*?<span>時(shí)間:(.*?)</span>.*?<!-- <div class="host-ico">樓主</div> -->.*?<div class="bbs-content.*?>\s*(.*?)</div>', re.DOTALL)
        text = text_pattern.findall(html_content)
        text_join = ['\r\n\r\n\r\n\r\n'.join(item) for item in text]
        self.txt_dict[self.num] = text_join

 



def page(url):
    """根據(jù)第一頁(yè)地址抓取總頁(yè)數(shù)"""
    html_page = urllib.urlopen(url).read()
    page_pattern = re.compile(r'<a href="\S*?">(\d*)</a>\s*<a href="\S*?" class="\S*?">下頁(yè)</a>')
    page_result = page_pattern.search(html_page)
    if page_result:
        page_num = int(page_result.group(1))
        return page_num

 

def write_text(dict, fn):
    """把字典內(nèi)容按鍵(頁(yè)數(shù))寫(xiě)入文本,每個(gè)鍵值為每頁(yè)內(nèi)容的list列表"""
    tx_file = open(fn, 'w+')
    pn = len(dict)
    for i in range(1, pn+1):
        tx_list = dict[i]
        for tx in tx_list:
            tx = tx.replace('<br>', '\r\n').replace('<br />', '\r\n').replace('&nbsp;', '')
            tx_file.write(tx.strip()+'\r\n'*4)
    tx_file.close()


def main():
    url = 'http://bbs.tianya.cn/post-16-996521-1.shtml'
    file_name ='abc.txt'
    my_page = page(url)
    my_dict = {}

    print 'page num is : %s' % my_page

    threads = []

    """根據(jù)頁(yè)數(shù)構(gòu)造urls進(jìn)行多線程下載"""
    for num in range(1, my_page+1):
        myurl = '%s%s.shtml' % (url[:-7], num)
        downlist = Down_Tianya(myurl, num, my_dict)
        downlist.start()
        threads.append(downlist)

    """檢查下載完成后再進(jìn)行寫(xiě)入"""
    for t in threads:
        t.join()

    write_text(my_dict, file_name)

    print 'All download finished. Save file at directory: %s' % os.getcwd()

if __name__ == '__main__':
    main()

相關(guān)文章

  • python 實(shí)現(xiàn)性別識(shí)別

    python 實(shí)現(xiàn)性別識(shí)別

    這篇文章主要介紹了python 實(shí)現(xiàn)性別識(shí)別的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • 如何安裝2019Pycharm最新版本(詳細(xì)教程)

    如何安裝2019Pycharm最新版本(詳細(xì)教程)

    這篇文章主要介紹了如何安裝2019Pycharm最新版本(詳細(xì)教程),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Django 聯(lián)表查詢(xún)操作方法

    Django 聯(lián)表查詢(xún)操作方法

    作為一個(gè)django使用的新手,在做練手項(xiàng)目中對(duì)聯(lián)表查詢(xún)感覺(jué)比較生疏,最近兩天整理了一些連表查詢(xún)應(yīng)用場(chǎng)景和使用方法以及無(wú)法使用django中ORM操作的原生查詢(xún),對(duì)Django 聯(lián)表查詢(xún)操作感興趣的朋友跟隨小編一起看看吧
    2023-09-09
  • PyQt5實(shí)現(xiàn)拖放功能

    PyQt5實(shí)現(xiàn)拖放功能

    這篇文章主要為大家詳細(xì)介紹了PyQt5實(shí)現(xiàn)拖放功能,拖放一個(gè)按鈕的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • OpenCV-Python使用cv2實(shí)現(xiàn)傅里葉變換

    OpenCV-Python使用cv2實(shí)現(xiàn)傅里葉變換

    在OpenCV中,我們通過(guò)cv2.dft()來(lái)實(shí)現(xiàn)傅里葉變換,使用cv2.idft()來(lái)實(shí)現(xiàn)逆傅里葉變換。本文就詳細(xì)的介紹一下這兩種用法,感興趣的可以了解一下
    2021-06-06
  • Python實(shí)現(xiàn)將Word表格嵌入到Excel中

    Python實(shí)現(xiàn)將Word表格嵌入到Excel中

    把Word中的表格轉(zhuǎn)到Excel中,順便做一個(gè)調(diào)整。這個(gè)需求在實(shí)際工作中,很多人還是經(jīng)常碰到的!本文就將介紹如何利用Python實(shí)現(xiàn)這一功能,需要的朋友可以了解一下
    2021-12-12
  • 使用Django+Pytest搭建在線自動(dòng)化測(cè)試平臺(tái)

    使用Django+Pytest搭建在線自動(dòng)化測(cè)試平臺(tái)

    最近由于公司的發(fā)展安排本人實(shí)現(xiàn)公司項(xiàng)目的自動(dòng)化測(cè)試,下面這篇文章主要給大家介紹了關(guān)于如何Django?+?Pytest搭建在線自動(dòng)化測(cè)試平臺(tái)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • python爬取酷狗音樂(lè)Top500榜單

    python爬取酷狗音樂(lè)Top500榜單

    大家好,本篇文章主要講的是python爬取酷狗音樂(lè)Top500榜單,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • python 正則表達(dá)式如何實(shí)現(xiàn)重疊匹配

    python 正則表達(dá)式如何實(shí)現(xiàn)重疊匹配

    這篇文章主要介紹了python 正則表達(dá)式如何實(shí)現(xiàn)重疊匹配,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python SQLAlchemy的Mapping與Declarative詳解

    python SQLAlchemy的Mapping與Declarative詳解

    這篇文章主要介紹了python SQLAlchemy的Mapping與Declarative詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論

承德市| 开原市| 新津县| 顺义区| 乌海市| 晋江市| 灵台县| 北京市| 青神县| 温宿县| 闸北区| 大化| 昌平区| 长泰县| 海盐县| 定南县| 黄石市| 南平市| 鄂托克旗| 金湖县| 凉城县| 彭阳县| 宝兴县| 赤峰市| 常山县| 岢岚县| 城固县| 高州市| 航空| 九江县| 桃园县| 老河口市| 修水县| 白银市| 仁寿县| 门源| 宁都县| 西乌| 霞浦县| 吴川市| 江安县|