#导入必备的包#本文爬取的是顶点小说中的完美世界为列。文中的aa.text,bb.text为自己创建的text文件
importrequestsfrom bs4 importBeautifulSoup#爬取目标url
url= 'https://www.x23us.com/html/42/42377/'headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3393.4 Safari/537.36'}#单独的函数,用于打开bb文件,bb文件用于存章节的url
defopen_href():
with open('bb.text', 'r', encoding='utf-8') as f:
a=f.readlines()
f.close()#将文件里的所有url读出并以列表的形式返回
returna#请求目标网址,并返回文本源码
defpage_index():
html= requests.get(url, headers=headers)ifhtml:returnhtml.text#将目标网址进行解析,得到所有章节的url
defpage_list(html):ifhtml:
a=[]
html_bs4= BeautifulSoup(html, 'lxml')
html_b= html_bs4.select('.L a')for i inhtml_b:
title=i.get_text()
href= url + i.get('href')
data={'title': title,'href': href
}
a.append(data)returna#将aa文件打开并将得到的章节内容写进文件里并关闭存档
deftext_cun_html(title, html):ifhtml:
with open('aa.text', 'a+', encoding='utf-8') as f:
f.write(title+ '\n' + html + '\n')
f.close()print('存档成功!!!!')return 'yes'
else:
None#将bb文件打开并将写入aa文件相对应的url写进bb文件里并关闭存档
deftext_cun_href(href):ifhref:
with open('bb.text', 'a+', encoding='utf-8') as f:
f.write(href+ '\n')
f.close()print('href存档成功!!')return 'ok'
else:
None#将得到的章节url解析并二次请求获取章节内容
defhtml_list_index(title, href):ifhref:
html= requests.get(url=href, headers=headers)if html.status_code == 200:
bs= BeautifulSoup(html.text, 'lxml')
bs4= bs.select('#contents')for item inbs4:
a=text_cun_html(title, item.get_text())#章节内容存档成功返回yes
if a == 'yes':
text_cun_href(href)else:
Nonedefmain():#首先获取下bb文件的url列表
number =open_href()print(number)
html=page_index()
data=page_list(html)for i indata:
title= i.get('title')
href= i.get('href')print(href)#判断发生异常后,在启动服务时,我们过滤掉已爬取过的url
if href + '\n' not innumber:
html_list_index(title, href)else:
Noneif __name__ == '__main__':
main()#简单思路实现断点续存,不喜勿喷,欢迎共同讨论