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

Python用正則表達(dá)式實(shí)現(xiàn)爬取古詩(shī)文網(wǎng)站信息

 更新時(shí)間:2021年12月11日 10:53:09   作者:碼農(nóng)飛哥  
這篇文章主要給大家介紹了關(guān)于Python如何利用正則表達(dá)式爬取爬取古詩(shī)文網(wǎng)站信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

分析古詩(shī)文網(wǎng)站

下圖1展示了古詩(shī)文網(wǎng)站—》詩(shī)文 欄目的首頁(yè)數(shù)據(jù)。該欄目的地址是:https://so.gushiwen.cn/shiwens/

第二頁(yè)的地址是:https://so.gushiwen.cn/shiwens/default.aspx?page=2&tstr=&astr=&cstr=&xstr= 。依次類(lèi)推第n頁(yè)的地址就是page=n。其他不變。

1. 用正則表達(dá)式獲取總頁(yè)數(shù)

匹配的正則表達(dá)式是r'<div class="pagesright">.*?<span .*?>(.*?)</span>'

  1. 首先,r修飾的字符串是原生字符串,首先匹配到<div class="pagesright"> 標(biāo)簽,然后再通過(guò).*?匹配到里面的里面的<a>標(biāo)簽<span>標(biāo)簽等。這里. 可以匹配到任意的一個(gè)字符(換行符除外),* 號(hào)可以匹配0或者任意多個(gè)字符。? 號(hào)表示只能匹配到1個(gè)或者0個(gè)。這里加上?號(hào)是為了使用非貪婪模式。
  2. <span .*?> 通過(guò)匹配到存放總頁(yè)數(shù)的<span>標(biāo)簽。在標(biāo)簽里指定.*?
  3. (.*?) 加上() 可以指定不同的分組,這里我們只需要獲取頁(yè)數(shù)所以就單獨(dú)添加一個(gè)分組。

所以,最終的代碼是:

 def get_total_pages():
    resp = requests.get(first_url)
    # 獲取總頁(yè)數(shù)
    ret = re.findall(r'<div class="pagesright">.*?<span .*?>(.*?)</span>', resp.text, re.DOTALL)
    result = re.search('\d+', ret[0])
    for page_num in range(int(result.group())):
        url = 'https://so.gushiwen.cn/shiwens/default.aspx?page=' + str(page_num)
        parse_page(url)

在findall方法中傳入re.DOTALL參數(shù)是為了是. 號(hào)可以匹配到換行符\n。

前面ret的結(jié)果是/ 5頁(yè)。再獲取5這個(gè)數(shù)字的話,還需要做一次匹配查找,這就是通過(guò)re.search('\d+', ret[0]) 來(lái)進(jìn)行查找。

2. 提取詩(shī)的標(biāo)題

如上圖2展示了詩(shī)的標(biāo)題的HTML源碼,從中可以看出詩(shī)的標(biāo)題被存在<b>標(biāo)簽 匹配詩(shī)的標(biāo)題的正則表達(dá)式是<div class="cont">.*?<b>(.*?)</b>

首先還是匹配到<div class="cont"> 標(biāo)簽,接著就是匹配<b>(.*?)</b> 這里還是采用非貪婪模式來(lái)進(jìn)行匹配。

3. 提取作者和朝代

如上圖3展示了詩(shī)的作者和朝代的HTML源碼,從中可以看出作者和朝代都是在<p class="source"></p> 標(biāo)簽下的兩個(gè)a標(biāo)簽中。

3.1 提取作者

提取作者的正則表達(dá)式是<p class="source">.*?<a .*?>(.*?)</a> 首先還是匹配到<p class="source"> 標(biāo)簽。接著就是匹配第一個(gè)<a> 標(biāo)簽中的內(nèi)容。

3.2 提取朝代

提取朝代的正則表達(dá)式是<p class="source">.*?<a .*?><a .*?>(.*?)</a> 與提取作者不同的是多了一個(gè)<a .*?> ,這是因?yàn)槌诘诙€(gè)<a>標(biāo)簽中。

4. 提取詩(shī)的內(nèi)容

如上圖4展示了詩(shī)的內(nèi)容的HTML源碼,從中可以看出詩(shī)句都在<div class="contson">標(biāo)簽中,所以只需要匹配到這個(gè)標(biāo)簽里的內(nèi)容即可。其正則表達(dá)式是<div class="contson" .*?>(.*?)</div>。

但是這樣匹配出來(lái)的數(shù)據(jù)是包含<br> 標(biāo)簽的。所以,我們需要通過(guò)sub 方法將這個(gè)標(biāo)簽替換掉。re.sub(r'<.*?>+', "", content)。

整理代碼

至此,我們就將所有想要的數(shù)據(jù)都提取到了。接下來(lái),我們還需要對(duì)數(shù)據(jù)進(jìn)行處理。我們期望的最終數(shù)據(jù)格式是:

 poems=[
        {
            "title": '漁家傲·花底忽聞敲兩槳',
            "author":'張三',
            'dynasty':'唐朝',
            'content':'xxxxxx'
        }
          {
            "title": '鵝鵝鵝',
            "author":'李四',
            'dynasty':'唐朝',
            'content':'xxxxxx'
        }
    ]

前面,我們分別得到了所有標(biāo)題的列表titles;所有作者的列表authors;所有朝代的列表dynastys;所有詩(shī)句的列表contents。

那么,我們?nèi)绾螌⑦@些列表組合成上面的那種形式呢?

這里,就需要用到 zip 函數(shù)了。該函數(shù)可以將多個(gè)列表組合成一個(gè)新的列表,其中列表的元素是元組。比如:

a=['name','age']
b=['張三',18]
c=zip(a,b)

調(diào)用zip 方法之后得到一個(gè)zip對(duì)象,該對(duì)象可以轉(zhuǎn)換成list 對(duì)象。最終得到的結(jié)果如下圖5

完整源代碼

# -*- utf-8 -*-
"""
@url: https://blog.csdn.net/u014534808
@Author: 碼農(nóng)飛哥
@File: gushiwen_rep.py
@Time: 2021/12/7 07:40
@Desc: 用正則表達(dá)式爬取古詩(shī)文網(wǎng)站
古詩(shī)文網(wǎng)站的地址:
https://www.gushiwen.cn/
"""
import re
import requests

headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36'
}

first_url = 'https://so.gushiwen.cn/shiwens/default.aspx'


def get_total_pages():
    resp = requests.get(first_url)
    # 獲取總頁(yè)數(shù)
    ret = re.findall(r'<div class="pagesright">.*?<span .*?>(.*?)</span>', resp.text, re.DOTALL)
    result = re.search('\d+', ret[0])
    for page_num in range(int(result.group())):
        url = 'https://so.gushiwen.cn/shiwens/default.aspx?page=' + str(page_num)
        parse_page(url)


# 解析頁(yè)面
def parse_page(url):
    resp = requests.get(url)
    text = resp.text
    # 提取標(biāo)題 (.*) 進(jìn)行分組,只提取<b>標(biāo)簽中的內(nèi)容,默認(rèn)情況下 .不能匹配\n。加上re.DOTALL 表示.號(hào)可以匹配所有,貪婪模式
    # titles = re.findall(r'<div class="cont">.*<b>(.*)</b>', text,re.DOTALL)
    # 非貪婪模式
    titles = re.findall(r'<div class="cont">.*?<b>(.*?)</b>', text, re.DOTALL)
    # 提取作者
    authors = re.findall(r'<p class="source">.*?<a .*?>(.*?)</a>', text, re.DOTALL)
    # 提取朝代
    dynastys = re.findall(r'<p class="source">.*?<a .*?><a .*?>(.*?)</a>', text, re.DOTALL)
    # 提取詩(shī)句
    content_tags = re.findall(r'<div class="contson" .*?>(.*?)</div>', text, re.DOTALL)
    contents = []
    for content in content_tags:
        content = re.sub(r'<.*?>+', "", content)
        contents.append(content)
    poems = []

    for value in zip(titles, authors, dynastys, contents):
        # 解包
        title, author, dynasty, content = value
        poems.append(
            {
                "title": title,
                "author": author,
                'dynasty': dynasty,
                'content': content
            }
        )
    print(poems)
    """
    poems=[
        {
            "title": '漁家傲·花底忽聞敲兩槳',
            "author":'張三',
            'dynasty':'唐朝',
            'content':'xxxxxx'
        }
          {
            "title": '漁家傲·花底忽聞敲兩槳',
            "author":'張三',
            'dynasty':'唐朝',
            'content':'xxxxxx'
        }
    ]
    """


"""
zip 函數(shù)
a=['name','age']
b=['張三',18]
c=zip(a,b)
c=[
    ('name','張三'),
    ('age',18)
]
"""

if __name__ == '__main__':
    get_total_pages()

最終的運(yùn)行結(jié)果是:

總結(jié)

本文以古詩(shī)文網(wǎng)為例演示了如何通過(guò)正則表達(dá)式來(lái)爬取網(wǎng)站數(shù)據(jù)。?

以上就是Python用正則表達(dá)式實(shí)現(xiàn)爬取古詩(shī)文網(wǎng)站信息的詳細(xì)內(nèi)容,更多關(guān)于Python正則表達(dá)式爬取網(wǎng)站信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python中JWT用戶認(rèn)證的實(shí)現(xiàn)

    python中JWT用戶認(rèn)證的實(shí)現(xiàn)

    這篇文章主要介紹了python中JWT用戶認(rèn)證的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 新年快樂(lè)! python實(shí)現(xiàn)絢爛的煙花綻放效果

    新年快樂(lè)! python實(shí)現(xiàn)絢爛的煙花綻放效果

    這篇文章主要為大家詳細(xì)介紹了python利用可視化技巧實(shí)現(xiàn)煙花綻放效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • pygame實(shí)現(xiàn)彈球游戲

    pygame實(shí)現(xiàn)彈球游戲

    這篇文章主要為大家詳細(xì)介紹了pygame實(shí)現(xiàn)彈球游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Python量化因子測(cè)算與繪圖超詳細(xì)流程代碼

    Python量化因子測(cè)算與繪圖超詳細(xì)流程代碼

    這篇文章主要介紹了Python量化因子測(cè)算與繪圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-02-02
  • 一百行python代碼將圖片轉(zhuǎn)成字符畫(huà)

    一百行python代碼將圖片轉(zhuǎn)成字符畫(huà)

    這篇文章主要為大家詳細(xì)介紹了一百行python代碼將圖片轉(zhuǎn)成字符畫(huà) ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Django權(quán)限機(jī)制實(shí)現(xiàn)代碼詳解

    Django權(quán)限機(jī)制實(shí)現(xiàn)代碼詳解

    這篇文章主要介紹了Django權(quán)限機(jī)制實(shí)現(xiàn)代碼詳解,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 探索python?dask靈活的并行計(jì)算庫(kù)應(yīng)用場(chǎng)景示例

    探索python?dask靈活的并行計(jì)算庫(kù)應(yīng)用場(chǎng)景示例

    這篇文章主要介紹了探索python?dask靈活的并行計(jì)算庫(kù)應(yīng)用場(chǎng)景示例,Dask?是?Python?中的一個(gè)靈活的并行計(jì)算庫(kù),允許用戶利用?CPU?內(nèi)核的強(qiáng)大功能,對(duì)大于內(nèi)存的數(shù)據(jù)集執(zhí)行分布式計(jì)算
    2024-01-01
  • Django中間件實(shí)現(xiàn)攔截器的方法

    Django中間件實(shí)現(xiàn)攔截器的方法

    今天小編就為大家分享一篇Django中間件實(shí)現(xiàn)攔截器的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python3使用urllib示例取googletranslate(谷歌翻譯)

    python3使用urllib示例取googletranslate(谷歌翻譯)

    這篇文章主要介紹了使用urllib取googletranslate(谷歌翻譯)的示例,通過(guò)這個(gè)谷歌翻譯示例學(xué)習(xí)python3中urllib的使用方法,
    2014-01-01
  • python中time模塊的常用方法及應(yīng)用詳解

    python中time模塊的常用方法及應(yīng)用詳解

    在Python開(kāi)發(fā)中,時(shí)間處理是繞不開(kāi)的剛需場(chǎng)景,從性能計(jì)時(shí)到定時(shí)任務(wù),從日志記錄到數(shù)據(jù)同步,時(shí)間模塊始終是開(kāi)發(fā)者最得力的工具之一,本文將通過(guò)真實(shí)案例和簡(jiǎn)潔代碼,系統(tǒng)講解time模塊的6大核心方法及其典型應(yīng)用場(chǎng)景,需要的朋友可以參考下
    2025-03-03

最新評(píng)論

刚察县| 攀枝花市| 沭阳县| 东方市| 中西区| 来安县| 万年县| 安图县| 日喀则市| 崇信县| 六枝特区| 抚远县| 日喀则市| 平谷区| 嘉义市| 库车县| 永德县| 武鸣县| 法库县| 社旗县| 常熟市| 柘城县| 江油市| 陈巴尔虎旗| 阿克陶县| 黔江区| 科技| 阿鲁科尔沁旗| 陈巴尔虎旗| 渭南市| 乐至县| 合川市| 越西县| 晋江市| 河池市| 张家川| 八宿县| 酒泉市| 莱西市| 会理县| 遂平县|