Python每日一練 18 抓取小說目錄和全文

2021-10-05 22:25:02 字數 2185 閱讀 4116

# -*- coding: utf-8 -*-

# @time : 2020/5/9 19:03

# @author : 我就是任性-amo

# @filename: 76.抓取**目錄和全文.py

# @software: pycharm

# @blog :

import requests # 第三方模組 需要使用pip安裝

import re # 匯入正則模組

import os

# 構造請求頭

headers =

# todo 1.根據**鏈結得到**目錄和對應的url

defget_catalogue

(url)

:# 傳送請求

response = requests.get(url=url, headers=headers)

response.encoding =

"utf-8"

# 指定編碼

chapter_info_list =

# 用來儲存獲取到的所有url和章節標題資料

if response.status_code ==

200:

# 判斷請求是否成功

li_list = re.findall(r".*"

, response.text)

# 過濾 獲取所有的li標籤

for li in li_list:

# print(li)

result = re.search(r'href="(.*)" title="(.*)"'

, li)

# 過濾出url和標題

if result:

# 組成完整的url

chapter_url =

""+ result.group(1)

# 得到章節的標題

title = result.group(2)

# 使用字典儲存url和title

chapter =

# 將字典新增到列表中

print

(chapter_info_list)

return chapter_info_list

# todo 2.根據章節目錄,抓取目錄對應的url指定的**正文頁面

defget_content

(chapter_info_list)

:for chapter_info in chapter_info_list:

# 傳送請求

response = requests.get(url=chapter_info[

"url"

], headers=headers)

if response.status_code ==

200:

# 判斷請求是否成功

# 判斷**資料夾是否存在

if os.path.exists(

"novel_鬥破蒼穹"):

pass

else

: os.makedirs(

"novel_鬥破蒼穹"

) content_list = re.findall(r""

, response.content.decode(

"utf8"))

[1:-

1]# 建立檔案 並將**正文寫入檔案中

with

open

("./novel_鬥破蒼穹/"

+ chapter_info[

"title"]+

".txt"

,"w"

, encoding=

"utf8")as

file

:# 將內容一行一行的寫入檔案中

for content in content_list:

file

.write(content +

"\n"

)if __name__ ==

'__main__'

: get_content(get_catalogue(

"/doupocangqiong/"

))

程式執行結果如下圖所示:

python每日一練

人生苦短,我用python 2018.6.5 有個目錄,裡面是你自己寫過的程式,統計一下你寫過多少行 包括空行和注釋,但是要分別列出來 coding utf 8 import re import glob defcodecolletion path filelist glob.glob path p...

Python每日一練

人生苦短,我用python 2018.6.13 最近事情有點多,有幾天沒寫了,正好最近需要統計一下各組排名,也就拿python代替手工了 各組給出其他組的排名,統計每個組最終的得分,第一名為0.5,第二名0.4,以此類推。coding utf 8 groups 3,2,5,4,6 1,3,5,6,4...

每日一練 no 18 約瑟夫問題

據說著名猶太歷史學家 josephus 有過以下的故事 在羅馬人占領橋塔帕特後,39個猶太人與 josephus 及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直...