'''詩詞名句網
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])
() book.write('\n
')return
cntdef
getwholebook(url,bookname,cnt):
print("")
for i in range(1,cnt+1):
newurl=url+'
/'+str(i)+"
.html
(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 西遊 出身不好,想成佛是有難度的 紅樓 出身不好,想嫁人是有難度的 ...