Python爬虫实战 | 抓取小说网完结小说斗罗大陆

储备知识应有:Python语言程序设计
Python网络爬虫与信息提取
两门课程都是中国大学MOOC的精彩课程,特别推荐初学者。环境Python3
本文整体思路是:1.获取小说目录页面,解析目录页面,得到所有章节链接存储在一个二维列表中。对应函数 allurl(urldir,html)
2.每次解析一章节,然后保存在文件中。对应函数 fillFile(urldir, file)

# 下载斗罗大陆
import bs4, lxml, traceback
from bs4 import BeautifulSoup
import requests

#爬取网页信息
def getHtmlText(url):
    try:
        # 设置代理 获取网页
        header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
        r=requests.get(url, headers= header)
        # 判断返回状态
        r.raise_for_status()
        # 设置编码
        r.encoding=r.apparent_encoding
        # 返回网页内容
        return r.text
    except:
        return "获取网页信息失败"

#解读网页信息
def fillFile(urldir, file):
    # 总章节数
    numbers = len(urldir)
    # 当前处理的章节数
    index = 1
    # 对二维列表进行解析
    for i in range(numbers):
        # 处理一维列表
        child = urldir[i]
        text = getHtmlText(child[1])
        # 煲汤,解析网页信息
        soup = BeautifulSoup(text, 'lxml')
        # 获取标题
        title = child[0]
        # 捕获出现的异常
        try:
            # 获取内容
            content = soup.select('#content')[0].text.replace('

'
, '').strip('style56(); ') both = title + '\n' + content + '\n' file.write(both) except IndexError: print(title + '出现列表索引异常----------------') print(traceback.print_exc()) except: print(title + ' 出现异常') # 打印具体的异常信息 print(traceback.print_exc()) print('\r{}当前已下载:{:.3f}%'.format(title,index / numbers * 100)) index += 1 # 解读目录信息,获取所有章节url def allurl(urldir,html): # 煲汤,解析目录信息 soup = BeautifulSoup(html,'html.parser') # 查找目录信息位置 allurl = soup.find_all('div', class_="clearfix dirconone")[0] # 下行遍历获取所有的章节信息 保存在二维列表中 for li in allurl.children: # 是否是标签对象 if isinstance(li, bs4.element.Tag): # 读取a标签 lis = li.a # 在字典类型中获取标题和链接 name,link = lis.attrs['title'].split(sep=',共')[0], lis.attrs['href'] urldir.append([name, link]) def main(): # 小说目录地址 url = 'http://www.quanshuwang.com/book/44/44683' # 存储所有的章节链接 uinfo = [] # txt文件 file = open('D:斗罗大陆.txt', 'w', encoding='utf-8') # 获取网页内容 html = getHtmlText(url) # 将所有目录url放入uinfo allurl(uinfo, html) # 将每一章解析到txt文件中 fillFile(uinfo, file) # 关闭文件 file.close() main()

你可能感兴趣的:(Python技巧)