spider爬虫练习,爬取顶点小说网,小说内容。

摘要:
构建url列表defurl_list(self)://www.booktxt.net/1 _ 1562/{}.html“url_list=[]foriinrange(self.page):

------------恢复内容开始------------

我这里练习爬虫的网站是顶点小说网,地址如下:

https://www.booktxt.net/

我这里以爬取顶点小说网里面的凡人修仙传为例子:

首先观察界面:

第一章:

spider爬虫练习,爬取顶点小说网,小说内容。第1张

第二章:

spider爬虫练习,爬取顶点小说网,小说内容。第2张

由上面可得出规律,每点一次下一章,url后面的数字就会自动加1。

爬虫主要分为3步:

第一步:构建url列表

    def url_list(self):
        url = "https://www.booktxt.net/1_1562/{}.html"
        url_list = []
        for i in range(self.page):
            url_list.append(url.format(507240 + i))
        return url_list

使用for循环,传入一个参数,没循环一次url后面的数字就会自动加1,把他放到一个新的url_list列表里面。

第二步:发送请求,获取响应结果

    def send_request(self, url):
        res = requests.get(url, headers=self.headers)
        res.encoding = "GBK"
        html_str = res.text
        # 获取html对象
        html = etree.HTML(html_str)
        return html

这里用到了requests库,需要传入一个url参数,返回html对象。

第3步:解析返回的内容,使用xpath提取想要的数据

for循环遍历url_list列表,同时调用send_request函数,传入url函数,遍历网址发送请求,返回html对象,通过xpath提取想要的数据。最后可以把解析出来的数据保存到本地

    def run(self):
        for url in self.url_list():
            print(url)
            html = self.send_request(url)
            html_tatle = html.xpath("//div[@class='bookname']/h1/text()")
            print(html_tatle[0])

            html_content = html.xpath("//div[@id='content']/text()")

            for content in html_content:
                print(content)

第4步:保存结果:

 # todo 保存
            with open('D:\Spider File\'+'{}.txt'.format(html_tatle), 'a+', encoding='utf-8') as f:
                time.sleep(random.randint(3, 6))  # 增加爬取时间间隔,防止被封ip
                f.write('	' * 3 + str(html_tatle) + '
')  # 章节名
                for content in range(len(html_content)):    # 内容
                    f.write(' ' * 4 + html_content[content] + '
')

运行结果如下:

spider爬虫练习,爬取顶点小说网,小说内容。第3张

完整代码如下:

import requests
from lxml import etree
import time,random
import warnings
requests.packages.urllib3.disable_warnings()


class FictionSpider():
    def __init__(self, page):
        self.page = page
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}

    def url_list(self):
        url = "https://www.booktxt.net/1_1562/{}.html"
        url_list = []
        for i in range(self.page):
            url_list.append(url.format(507240 + i))
        return url_list

    def send_request(self, url):
        res = requests.get(url, headers=self.headers,verify=False)
        res.encoding = "GBK"
        html_str = res.text
        # 获取html对象
        html = etree.HTML(html_str)
        return html

    def run(self):
        for url in self.url_list():
            print(url)
            html = self.send_request(url)
            html_tatle = html.xpath("//div[@class='bookname']/h1/text()")
            # print(html_tatle[0])
            html_content = html.xpath("//div[@id='content']/text()")
            # todo 保存
            try:
                with open(r'D:\Spider File\'+'{}.txt'.format(html_tatle), 'a+', encoding='utf-8') as f:
                    time.sleep(random.randint(1, 3))  # 增加爬取时间间隔,防止被封ip
                    f.write('	' * 3 + str(html_tatle) + '
')  # 章节名
                    for content in range(len(html_content)):    # 内容
                        f.write(' ' * 4 + html_content[content] + '
')
            except Exception as e:
                print("错误是:{}".format(e))




if __name__ == '__main__':
    FictionSpider(608).run()

免责声明:文章转载自《spider爬虫练习,爬取顶点小说网,小说内容。》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇overflowWindows Mobile 6.0 SDK和中文模拟器下载下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python如何获取公众号下面粉丝的openid

如何获取公众号下面粉丝的openid呢,首先要获取一个access_token,这个token可不是令牌(Token),如何获取这个access_token呢?有两种方法,方法如下: #-*- coding: cp936 -*- #python 27 #xiaodeng #原文在 https://www.cnblogs.com/dengyg200891/p...

Java 将两个List转换为流合并List

List<StudentOrder> List1= student.getItemVoList().stream().filter(o -> Objects.equals(o.getStatus(), Status.WAIT.getCode())).collect(Collectors.toList());...

数据报表开发技巧:自动为数据报表添加【小计】、【总计】行

  在开发ERP系统的数据报表时,几乎都是需要看到【小计】、【总计】这样的汇总数据的,在数据报表的显示列表中,最下面的一行通常就是【小计】或者【总计】的汇总行。如果手动为每个报表都增加汇总行,那也是一份不小的工作量。   所以,如果能自动为每个数据报表自动添加【小计】、【总计】汇总行,那将可以节省不少的开发时间。本文将给出实现这种方案的思路原理以及源码。...

python中 array 和 list 不同场景效率对比

在新添加场景中,即 list 使用 append方法,array使用np.append方法。 在100000条数据测试中,list用时:0.0 时 0.0分0.01秒,array用时:0.0 时 0.0分1.93秒。结论: list胜出。 在搜索场景中,即 list 使用 index方法,array使用np.where方法。 在100000条数据测试中,,...

mybatis传入多个参数

需要查阅本文的基本都是需要传入多个参数的,这里记住一句话:无论你传的参数是什么样的,最后mybtis都会将你传入的转换为map的,那么既然这样,当我们要传入多个参数时,何不直接给与map类型即可,然后mapper.xml通过#{map.key}来获取值即可,这个特别适合动态搜索,或者多个参数的查询,并且可以在mapper的xml语句中通过if判断来实现若为...

url加密并计算时间

将URL地址参数进行加密传输提高网站安全性 加密算法,直接调用就好 function keyED($txt,$encrypt_key){ $encrypt_key = md5($encrypt_key); $ctr=0; $tmp = ""; for($i=0;$i<strlen($txt);$i++)...