爬取一部小说(适合爬虫新手来练习)

今天刚完成老师的作业,没有事情做,然后就来写一篇博客。这次我们来聊一聊如何爬取一部小说(因为我是初学者,现在就会爬取静态网站,对于大型网站,我还是有点困难的)

正如我们前一篇博客所讲到的爬虫的基本框架

import request

def gtehtml(url):
    try:
        response = requests.get(url)
        response.raise_for_status()
        response.encoding = response.apparent_encoding
        return response.text
    except:
        return "爬取失败"
if __name__ == "__main__":
    url = "http://www.baidu.com"
    page = gethtml(url)
    print(page)

关于这个框架的解释请大家看我的上一篇博客

接下来我们要爬取的网站是: 

http://www.bjkgjlu.com

我随便从网上找的一个小说网站,我感觉挺好爬的,毕竟刚刚会一点爬虫,就先找简单的网站练练手

程序的具体思路如下:

1:选择一部小说,找到这部小说的目录,利用爬虫把所有的章节的来链接保存下来,并且把每一个章节的名字也保存下来,这样有利于爬取下来的文字存入文件时的命名.

2:做完上面一步,然后就是根据上面保存的每一项章节的链接,爬取每一章节的内容,然后就是把章节存入文件.

然后要查看网页的源代码

 

 这一部分参考代码(大家有什么好的方法可以给我留言,谢谢!)

url = "http://www.bjkgjlu.com/303618kyi/catalog"
    zhangjie_name_list = []#每一章的名字
    zhangjie_url_list = []#每一章的url地址
    html = gethtml(url)
    soup = bs4.BeautifulSoup(html,"html.parser")
    #获取每一章的链接并提取name和url
    for i in soup.findAll("div",attrs={"class":"col-xs-120 col-sm-60 col-md-40 col-lg-30"}):
        for j in i.children:
            zhangjie_name_list.append(j.text)
            zhangjie_url_list.append(j.get("href"))
    print(len(zhangjie_name_list))
    for j in range(len(zhangjie_name_list)):
        zhangjie(zhangjie_url_list[j],zhangjie_name_list[j])

 当我们把这些链接和章节名称爬取下来之后,就开始我们的最后一步了,爬取每一章节的内容,并清洗数据,数据清洗我认为是最爬虫比较难的难的部分,要找到对应的文字所在的标签和要考虑一些编码的问题。

接下来看每一章节的网页的源代码:

这样只要把所有的爬下来的内容分别存入对应的文件就行了

最后给出全部的代码

import requests
import bs4
import json


#获取网页代码
def gethtml(url):
    try:
        response = requests.get(url)
        response.raise_for_status()
        response.encoding = response.apparent_encoding
        return response.text
    except:
        return "爬取失败"

#提取每一页中的文字并存入文件
def zhangjie(url,name):
    html = gethtml("http://www.bjkgjlu.com" + url)
    soup = bs4.BeautifulSoup(html,"html.parser")
    for i in soup.findAll("div", attrs={"class": "chapter_content"}):
        with open(name+".txt","wb") as f:
            f.write(i.text.split("&lt")[0].encode("utf-8"))
            print(name+"爬取结束,并存入文件")


if __name__=="__main__":
    url = "http://www.bjkgjlu.com/303618kyi/catalog"
    zhangjie_name_list = []#每一章的名字
    zhangjie_url_list = []#每一章的url地址
    html = gethtml(url)
    soup = bs4.BeautifulSoup(html,"html.parser")
    #获取每一章的链接并提取name和url
    for i in soup.findAll("div",attrs={"class":"col-xs-120 col-sm-60 col-md-40 col-lg-30"}):
        for j in i.children:
            zhangjie_name_list.append(j.text)
            zhangjie_url_list.append(j.get("href"))
    print(len(zhangjie_name_list))
    for j in range(len(zhangjie_name_list)):
        zhangjie(zhangjie_url_list[j],zhangjie_name_list[j])

 好了,今天就到这了,谢谢!

猜你喜欢

转载自blog.csdn.net/yanzhiguo98/article/details/85224190
今日推荐