当前位置: 首页 > 后端技术 > Python

Python小说爬虫

时间:2023-03-26 14:34:18 Python

以下代码仅供测试学习,请谨慎使用。只用于爬取笔趣阁中的小说,可以直接复制到Pycharm中,也可以复制成.py文件,然后在cmd命令行运行python*.py文件。在运行以下代码之前,需要使用pip安装一些相应的库:requests、BeautifulSoup。!/usr/bin/python#-*-coding:utf-8-*-importrequests#用于抓取网页html源码importrandom#从bs4中取随机数importBeautifulSoup#用于替换正则表达式源码标签里的内容importsysimporttime#时间相关的操作类downloader(object):def__init__(self):self.server='https://www.biqukan.com/'#这是首页biqukan,不用修改self.target='https://www.biqukan.com/55_55278/'#这里是你要下载的具体小说的网页链接,修改self.names=[]#章节名self.urls=[]#章节链接self.nums=0#章节数"""获取html文档内容"""defget_content(self,url):#设置headers模拟浏览器访问,否则可能会被拒绝,可以通过浏览器获取,无需修改header={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Connection':'keep-alive','接受编码':'gzip,deflate,br','Accept-Language':'zh-CN,zh','User-Agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/81.0.4044.138Safari/537.36'}#设置超时获取随机数是为了防止网站被爬虫识别,不需要修改timeout=random。choice(range(80,180))whileTrue:try:req=requests.get(url=url,headers=header,timeout=timeoutt)req.encoding='GBK'#这里是网页的编码转换,要根据网页的实际需要修改。经测试,这个编码没有问题breakexceptExceptionase:print('3',e)time.sleep(random.choice(range(5,10)))returnreq.text"""得到下载的章节目录"""defget_download_catalogue(self,url):html=self.get_content(url)bf=BeautifulSoup(html,'html.parser')texts=bf.find_all('div',{'class':'listmain'})div=texts[0]a_s=div.find_all('a')self.nums=len(a_s[750:])#我们需要删除不想下载的章节列表。《笔趣阁》前12回重复。可以把这里的值改成#12,也可以根据自己要下载的章节数修改。下面是一样的,这里保持相同的值即可Brokerlishttp://www.fx61.com/brokerlis...foreachina_s[750:]:self.names.append(each.string)self.urls.append(self.server+each.get('href'))"""获取特定章节下载"""defget_download_content(self,url):html=self.get_content(url)html=self.get_content(url)bf=BeautifulSoup(html,'html.parser')texts=bf.find_all('div',{'class':'showtxt','id':'content'})text=texts[0].text.replace('\xa0'*7,'\n\n')#\xa0表示连续空格,去掉这些空格returntext"""将文章写入文件"""defwriter(self,name,path,text):write_flag=Truewithopen(path,'a',encoding='utf-8')asf:f.write(name+'\n')f.writelines(text)f.write('\n\n')if__name__=='__main__':dl=下载器()dl.get_download_catalogue(dl.target)foriinrange(dl.nums):dl.writer(dl.names[i],'Yechen.txt',dl.get_download_content(dl.urls[i]))#保存的文件名根据需要修改print("Downloaded:%.2f%%"%float((i+1)/dl.nums*100)+'\r')print('DownloadFini嘘!')