python爬取起点小说

爬虫是什么?

简单来讲,爬虫就是一个探测机器,它的基本操作就是模拟人的行为去各个网站溜达,点点按钮,查查数据,或者把看到的信息背回来。就像一只虫子在一幢楼里不知疲倦地爬来爬去。

好了,既然已经了解了爬虫那么我们就分析一下爬虫需要的步骤吧!

离不开的四大步骤

1.目标url 网站
2.发送请求
3.解析数据
4.保存数据

所以我们在抓取小说的时候是不是要依次访问每一层的网址…(以文雀为例)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好了这是爬小说的几个步骤,明白之后就可以来写代码啦!

xpath和requests常用语法

(这次代码需要xpath和requests)
想看的直接点此链接:https://blog.csdn.net/weixin_45859193/article/details/107064009

xpath下载

xpath工具下载链接https://pan.baidu.com/s/1GXPm1kMENXhOkefKcEQnlA
提取码:8wwv

代码块

建议:如果没看懂代码的可以看看四大步骤,代码每一块也有注释

import requests
from lxml import etree



#发送请求

#第一层url地址
url='https://www.qidian.com/all?action=1&orderId=&page=1&vip=0&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0'
#模拟浏览器
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'}
#解析数据
data=requests.get(url,headers=headers).content.decode()

#转换数据
html=etree.HTML(data)
#第二层url地址
novel_url_list=html.xpath('//div[@class="book-img-box"]/a/@href')


for novel_url in novel_url_list:
    
    #第二层url地址的目录
    novel_url='https:'+novel_url+'#Catalog'
    #解析第二层的数据
    data=requests.get(novel_url,headers=headers).content.decode()
    #转换第二层的数据
    html = etree.HTML(data)
    
    #小说目录
    name=html.xpath('/html/body/div/div[6]/div[1]/div[2]/h1/em/text()')
   
    #获取第三层url的地址
    catalog_url_list=html.xpath('//ul[@class="cf"]/li/a/@href')
    #这里来个迭代,因为你要第三层的全部文本内容
    for catalog_url in catalog_url_list:
        
        #到了第三层的地址了
        catalog_url='https:'+catalog_url

        #解析第三层的数据
        data=requests.get(catalog_url,headers=headers).content.decode()

        #转换第三层数据
        html=etree.HTML(data)
        #小说名
        name_url=html.xpath('//h3[@class="j_chapterName"]/span[@class="content-wrap"]/text()')

        #正文,join是删掉我不要的数据\u3000还有空格
        text='\n'.join(html.xpath('//div[@class="read-content j_readContent"]//p//text()')).strip().replace('\u3000','')
        
        #定义文件名
        file_name =''.join(name)+'.txt'

        #a+ 追加,因为不仅要写入标题,还有正文,encoding是编码

        with open(file_name,'a+',encoding='utf-8')as f:
            #标题写入
            f.write('-------'+''.join(name_url[-1])+'-------'+'\n')
            #正文写入
            f.write(text+'\n\n')#换行
            #打印保存是否成功
            print(''.join(name_url[-1])+'---提取成功')
    #提示第一本抓我了           
    print('抓取完成')
                                        

效果

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45859193/article/details/107103053
今日推荐