Crawler:利用Beautifulsoup库+find_all方法实现下载在线书架小说《星祖的电影世界》

举报
一个处女座的程序猿 发表于 2021/03/28 01:18:26 2021/03/28
【摘要】 Crawler:利用Beautifulsoup库+find_all方法实现下载在线书架小说《星祖的电影世界》     目录 输出结果 核心代码         输出结果   核心代码   # -*- coding: utf-8 -*-'''Created on 2018年4月7日@author: niu'''#Py之Crawler:利用b...

Crawler:利用Beautifulsoup库+find_all方法实现下载在线书架小说《星祖的电影世界》

 

 

目录

输出结果

核心代码


 

 

 

 

输出结果

 

核心代码

 


  
  1. # -*- coding: utf-8 -*-
  2. '''
  3. Created on 2018年4月7日
  4. @author: niu
  5. '''
  6. #Py之Crawler:利用beautifulsoup+find_all方法实现下载在线书架小说《星祖的电影世界》
  7. #find_all方法的第一个参数是获取的标签名,第二个参数class_是标签的属性。
  8. from bs4 import BeautifulSoup
  9. import requests, sys
  10. class downloader(object):
  11. def __init__(self):
  12. self.server = 'http://www.biqukan.com/'
  13. self.target = 'http://www.biqukan.com/50_50927/'
  14. self.names = [] #存放章节名
  15. self.urls = [] #存放章节链接
  16. self.nums = 0 #章节数
  17. def get_download_url(self): #获取下载链接
  18. req = requests.get(url = self.target)
  19. html = req.text
  20. div_bf = BeautifulSoup(html) #利用beautifulsoup提取内容
  21. div = div_bf.find_all('div', class_ = 'listmain') #通过审查元素发现全书各个章节存放在了class属性为listmain的div标签下,各章之间差别就在于这些章节的【href】属性不一样,而且其属性正好对应着每一章节URL后半部分,那这样,我们就可以根据标签的href属性值获得每个章节的链接和名称了。
  22. a_bf = BeautifulSoup(str(div[0]))
  23. a = a_bf.find_all('a')
  24. self.nums = len(a[14:]) #剔除不必要的章节,并统计章节数
  25. for each in a[14:]:
  26. self.names.append(each.string)
  27. self.urls.append(self.server + each.get('href')) #再接着提取章节名和章节文章
  28. def get_contents(self, target): #获取章节内容,target下载连接(string),texts章节内容(string)
  29. req = requests.get(url = target)
  30. html = req.text
  31. bf = BeautifulSoup(html)
  32. texts = bf.find_all('div', class_ = 'showtxt') #观察不同标签发现class属性为showtxt的div标签只有一个!这个标签里面存放的内容,是我们需要的小说正文
  33. texts = texts[0].text.replace('\xa0'*8,'\n\n') #replace方法,剔除空格,替换为回车进行分段。 在html中是用来表示空格的。replace(‘\xa0’*8,’\n\n’)就是去掉下图的八个空格符号,并用回车代替
  34. return texts
  35. def writer(self, name, path, text): #将爬取的文章内容写入文件
  36. write_flag = True
  37. with open(path, 'a', encoding='utf-8') as f: #当前路径下,小说保存名称(string)
  38. f.write(name + '\n') #章节名称(string)
  39. f.writelines(text) #章节内容(string)
  40. f.write('\n\n')
  41. if __name__ == "__main__":
  42. dl = downloader()
  43. dl.get_download_url()
  44. print('《星祖的电影世界》开始下载:')
  45. for i in range(dl.nums):
  46. dl.writer(dl.names[i], '星祖的电影世界.txt', dl.get_contents(dl.urls[i]))
  47. sys.stdout.write(" 已下载:%.3f%%" % float(i/dl.nums) + '\r')
  48. sys.stdout.flush()
  49. print('《星祖的电影世界》下载完成')

 

 

文章来源: yunyaniu.blog.csdn.net,作者:一个处女座的程序猿,版权归原作者所有,如需转载,请联系作者。

原文链接:yunyaniu.blog.csdn.net/article/details/79859059

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。