爬取四大名著

2022-09-06 10:57:17 字數 4726 閱讀 8161

'''

詩詞名句網

1. 爬取固定書籍

2. 爬取書名

3. 爬取本部書的章回目錄

4. 靈活處理,爬取任意書籍的章回目錄

5. 加入異常處理

6. 爬取任意整本書

'''import

requests

import

redef

bookspider(oldurl,bookname):

url=oldurl+"

.html

"html=loadpage(url)

try:

with open(

"demo.txt

",'w

',encoding='

utf-8

') as f:

f.write(html)

except

:

print("

file operation error")

findtitle(

"demo.txt

",bookname)

cnt=findtileofpages("

demo.txt

",bookname)

getwholebook(oldurl,bookname,cnt)

deffindtitle(filename,bookname):

try:

f=open(filename,encoding='

utf-8')

book=open("

book.txt

",'w

',encoding='

utf-8')

except

:

print("

file operation error")

while

true:

line=f.readline()

#print("read:"+line)

ifnot

line:

break

pattern=re.compile(r'

《.》'

) bookname=re.search(pattern,line)

flag=false

ifbookname:

print("

書名:",end=""

)

for ch in

str(bookname):

if ch == '《'

: flag=true

if ch == '》'

: flag=false

print("》"

) book.write('》

'+'\n')

ifflag:

print(ch,end=""

) book.write(ch)

deffindtileofpages(filename,bookname):

cnt=0

try:

f = open(filename,encoding='

utf-8')

book = open("

book.txt

",'a

', encoding='

utf-8')

except

:

print("

file operation error")

book.write(

"目錄:\n")

while

true:

line =f.readline()

#print("read:"+line)

ifnot

line:

break

pattern = re.compile(r'

'+bookname+'

/\d+.html">.')

titleofpages =pattern.findall(line)

flag =false

iftitleofpages:

for i in

range(0,len(titleofpages)):

cnt+=1

for j in

range(0,len(titleofpages[i])):

if titleofpages[i][j] == '第'

: flag=true

if titleofpages[i][j] == '

<':

flag=false

ifflag:

print(titleofpages[i][j],end=""

) book.write(titleofpages[i][j])

print

() book.write('\n

')return

cntdef

getwholebook(url,bookname,cnt):

print("")

for i in range(1,cnt+1):

newurl=url+'

/'+str(i)+"

.html

"print

(newurl)

html=loadpage(newurl)

try:

with open(

"bookhtml.txt

", '

w', encoding='

utf-8

') as f:

f.write(html)

except

:

print("

file operation error")

f = open('

bookhtml.txt

', '

r', encoding='

utf-8')

bookcontent = open('

book.txt

', '

a', encoding='

utf-8')

while

true:

line =f.readline()

#print("read:"+line)

ifnot

line:

break

pattern = re.compile(r'')

content =re.findall(pattern, line)

patternoftitle=re.compile(r'')

contentoftitle =re.findall(patternoftitle, line)

flag=false

for i in

range(0, len(contentoftitle)):

for j in

range(0, len(contentoftitle[i])):

if contentoftitle[i][j] == '

>':

flag=true

continue

if contentoftitle[i][j] == '

<':

flag=false

continue

ifflag:

bookcontent.write(contentoftitle[i][j])

bookcontent.write('\n

')flag =false

for i in

range(0, len(content)):

for j in

range(0, len(content[i])):

if content[i][j] == '

<':

flag=false

continue

if content[i][j] == ';'

and content[i][j - 1] == 'p'

and content[i][j + 1] != '&'

: flag =true

continue

ifflag:

bookcontent.write(content[i][j])

bookcontent.write('\n

')f.close()

bookcontent.close()

defloadpage(url):

try:

header =

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

return response.content.decode('

utf-8')

except

:

print("

page load error")

if__name__ == "

__main__":

bookname=input("

請輸入想看的書名:(全拼)")

url = "

"+bookname

bookspider(url,bookname)

微軟四大名著

微軟4大名著 每一本都是值得永遠珍藏的經典!互動 別專題 特別專題 1.程式設計精粹 編寫高質量c語言 英文版 詳細資訊 程式設計精粹 編寫高質量c語言 英文版 2.windows程式設計 英文版 第5版 享譽世界的微軟技術大師。他的著作和文章為windows程式設計技術的推廣和普及作出了巨大貢獻,...

1 6 4 四大名著案例

如下 doctype html html lang en head meta charset utf 8 title 四大名著 title head body h1 四大名著 水滸傳 h3 水滸傳 是中國歷史上第一部用古白話文寫成的歌頌農民起義的長篇章回體版塊結構 以宋江領導的起義軍為主要題材,通過...

四大名著經典妙解

1 紅樓 大部分是女人 水滸 大部分是男人 西遊 大部分不是人 三國 大部分全是人。2 紅樓 丫頭臉皮厚 水滸 朝廷臉皮厚 三國 軍師臉皮厚 西遊 神仙臉皮厚。3 西遊 猴哥救我 紅樓 妹妹救我 水滸 叔叔救我 三國 軍師救我。4 西遊 出身不好,想成佛是有難度的 紅樓 出身不好,想嫁人是有難度的 ...