python爬虫五:爬取小说,下载到本地

 
 
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup

'''
qula.com
小说爬虫下载
'''

def say():

    print ("aaa")

say()


def get_html(url):
    try:

        r=requests.get(url,timeout=30)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        #print (r.text)
        return r.text
    except:

        print ('出现了一点问题')

def get_content(url):
     '''
       爬取每一类型小说排行榜,
       按顺序写入文件,
       文件内容为 小说名字+小说链接
       将内容保存到列表
       并且返回一个装满url链接的列表
       '''

     url_list=[];

     html=get_html(url)
     soup=BeautifulSoup(html,'lxml')

     div_main=soup.find('div',attrs={'id':'main'})
     lilist=div_main.find_all('li')
     for li in lilist:
         #href地址
         href=li.find("a")['href']

        #print (li.find("a").text.strip())

        #文件的创建方式
         with open("data.txt",'a',encoding='utf-8') as f:
             #编码格式的加入
             f.write("小说名:{:<}\t 小说地址:{:<}\n".format(li.find("a").text.strip(),href))

         url_list.append(href)

     return url_list


#获取每个章节的url和章节名
def get_contenturl(url_list):
    dict = {}
    for url in url_list:

        listUrl=[]
        html=get_html(url)
        soup=BeautifulSoup(html,'lxml')
        print (html)
        f=open("c:小说/{}.txt".format(soup.find('div',attrs={'id':'info'}).h1.contents[0]),'w',encoding='utf-8')

        ddList=soup.find_all('dd')
        dictList = {}
        for dd in ddList:

            #章节名
            #print (dd.find("a").text.strip())

            #章节url
            #print ('http://www.biqugela.com'+dd.find('a')['href'])

            #将章节对应的url地址放到字典里
            dictList[dd.find("a").text.strip()]='http://www.biqugela.com'+dd.find('a')['href']

            #获取每一个章节的内容
            html=get_html('http://www.biqugela.com'+dd.find('a')['href'])
            soup=BeautifulSoup(html,'lxml')

            content=soup.find('div',attrs={'id':'content'})

            #print (content.text.replace('<br/>','\n'))

            #写入文件
            f.write(dd.find("a").text.strip()+'\n')
            f.write(content.text.replace('<br/>','\n'))






        #再将书名与上一个地点对应
        #dict[soup.find('div',attrs={'id':'info'}).h1.contents[0]]=dictList



    f.close()
    return dict

def main(url):
    url_list= get_content(url);
    get_contenturl(url_list);

url="http://www.biqugela.com/xiaoshuodaquan/"
if __name__=="__main__":
    main(url)


猜你喜欢

转载自blog.csdn.net/qq_38788128/article/details/80481031