python多线程爬虫爬取顶点小说内容(BeautifulSoup+urllib)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python多线程爬虫爬取顶点小说内容(BeautifulSoup+urllib)相关的知识,希望对你有一定的参考价值。

参考技术A 之前写过python爬取起点中文网小说,多线程则是先把爬取的章节链接存到一个列表里,然后写一个函数get_text每次调用这个函数就传一个章节链接,那么就需要调用n次该函数来获取n章的内容,所以可以用for循环创建n个线程,线程的target就是get_text,参数就是章节的url。

随便点开的,辣眼睛哈哈哈

个人感觉用了多线程之后速度并没有很大的提升,速度大致是20个txt文件/分钟,是否有单个机器上继续提升爬取速度的方法?

下一步打算搞点能被封ip的爬取行为,然后学学分布式爬虫。加油~

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

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

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

https://www.booktxt.net/

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

首先观察界面:

第一章:

技术图片

第二章:

技术图片

由上面可得出规律,每点一次下一章,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)

运行结果如下:

技术图片

代码如下:

import requests
from lxml import etree


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)
        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()")
            print(html_content)
            for content in html_content:
                print(content)



if __name__ == __main__:
    FictionSpider(3).run()

 

以上是关于python多线程爬虫爬取顶点小说内容(BeautifulSoup+urllib)的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫爬取目标小说并保存到本地

python爬取小说

从“顶点小说”下载完整小说——python爬虫

Python爬虫之Scrapy框架系列(14)——实战ZH小说爬取多页爬取

,遇到的爬虫问题与解决思路

Python实战项目网络爬虫 之 爬取小说吧小说正文