Python爬虫(四):新增纵横中文网爬虫Demo--爬取136书屋小说,并保存至本地文本文件中,单进程多进程对比效率(以三生三世十里桃花为例)

本文介绍了如何使用Python爬虫抓取纵横中文网的小说,如《三生三世十里桃花》,并将其保存到本地文本文件中。针对网站的反爬策略,提供了解决方案。同时,对比了单进程和多进程爬取的效率,指出过多进程可能会影响电脑性能。
摘要由CSDN通过智能技术生成

运行环境:Python3.6


2019-05-24更新,由于原有的页面改版了,所以现在新增了一个[纵横中文网book.zongheng.com]采集代码Demo
  • 存在反爬,导致爬虫运行出错,下面两个方法亲测可以解决
    • 加入代理IP,我写了一个代理IP提取接口 -> 跳转
    • 将浏览器访问生成的Cookie信息加入到headers中;
  • 该爬虫不能正确抓取VIP权限才能访问的内容
# -*- coding: utf-8 -*-
# @Author : Leo

import re
import os
import logging
import requests
from bs4 import BeautifulSoup
from requests.adapters import HTTPAdapter

logging.basicConfig(level=logging.INFO,  # 最低输出
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S')


class ZonghengSpider:
    """
    纵横中文网爬虫
    - http://book.zongheng.com/
    """
    # 小说保存主路径
    novel_save_dir = 'novels'
    session = requests.session()
    # 设置重试次数
    session.mount('http://', HTTPAdapter(max_retries=3))
    session.mount('https://', HTTPAdapter(max_retries=3))

    def __init__(self):
        self.session.headers.update(
            {
   'Host': 'book.zongheng.com',
             'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) '
                           'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36'})
        self.chapter_url = 'http://book.zongheng.com/api/chapter/chapterinfo?bookId={book_id}&chapterId={chapter_id}'

    def crawl(self, target_url: str):
        """
        开始爬取当前指定url
        :param target_url: 为需要爬取的书籍页面URL
        :return:
        """

        def request_url(url):
            resp = self.session.get(url=url)
            if resp.status_code == 200:
                return resp.json()
            else:
                return None

        book_name, book_id, chapter_id = self.get_page_info(target_url)
        logging.info(f'获取到的书籍名: {book_name}, 书籍ID: {book_id}, 首章ID: {chapter_id}')
        if all([book_name, book_id, chapter_id]):
            # 设置保存路径
            novel_save_path = os.path.join(self.novel_save_dir, book_name)
            if not os.path.exists(novel_save_path):
                os.makedirs(novel_save_path)
            logging.info(f'书籍保存路径: {novel_save_path}')
            index = 0
            while True:
                index += 1
                chapter_url = self._get_chapter_url(book_id, chapter_id)
          
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值