使用多线程爬取笔趣阁

今日目标:新笔趣阁的全部小说目录
爬取分析:暂无任何严重反爬
爬取思路:

  • Step1:从base网页获取所有小说名字+小说链接
  • Step2:请求小说链接,获得章节名+章节链接
  • Step3:请求章节链接,获得小说内容
  • Step4:根据小说名字创建文件,持久化保存小说内容

技术分析:

  • 01:采用requests库,进行验证请求
  • 02:文件读取操作需要用到os模块
  • 03:解析文件使用xpath
  • 04:验证爬取成功之后再改写为多线程爬虫

开始构建代码:

  • 定义2个常用函数
import os
import requests
from lxml.html import etree

#请求函数
def get_html(link):
    #伪造请求头
    headers = {
   
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
        'Referer': 'http://www.xbiquge.la/paihangbang/',
        'Host': 'www.xbiquge.la'
    }
    #实例化session
    session = requests.session()
    #发起请求
    res = session.get(url=link, headers=headers)
    try:
        if res.status_code == 200:
            #避免网页乱码
            res.encoding = 'utf-8'
            #返回获取到的网页
            return res.text
    except requests.ConnectionError:
        return None

#解析函数
def parse_html(html, xpath_bds): 
    '''
    :param html: 目标网页
    :param xpath_bds: xpath表达式
    :return: 解析后的列表  
    '''  
    parse_html = etree.HTML(html)
    result = parse_html.xpath(xpath_bds)
    return result
  • 构建爬虫文件
#自定义保存位置
PATH = r'G:\小说'+ os.path.sep  + '{}.txt'

class BiquSpider:
    def __init__(self):
        self.base_url = 'http://www.xbiquge.la/xiaoshuodaquan/'

    def get_article(self):
        '''
        :return: 返回格式为{文章名:文章链接}的字典
        '''
        html = get_html(self.base_url)
        xpath_bds = '//div[@id="main"]/div[contains(@class,"novellist")]'
        parsed_page = parse_html(html,xpath_bds)
        for article in parsed_page:
            # 小说名字列表
            article_title_list = article.xpath('./ul/li/a/text()')

            # 小说链接列表
            article_link_list = article.xpath('./ul/li/a/@href')

            return dict(zip(article_link_list,article_title_list))

    def get_content(self
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值