python爬虫学习一--爬取网络小说实例

标签: python

最近疫情猖獗,长假憋在家里实在无聊,早上突然看了一篇python爬虫文章,当场决定试验一下,参照了一下别人的案例,自己各种踩坑捣鼓了好几个小时,终于成功最后把具体步骤和注意点分享给大家:

1、Python爬虫关键的两个组件是requests和BeautifulSoup,特别是BeautifulSoup组件,认真学习好,会使你的爬取之路事半功倍。

2、初始化爬取需要的变量

# -*- coding:UTF-8 -*-
import requests, sys
import urllib3
from bs4 import BeautifulSoup

class downloader():
  def __init__(self):
    self.server = 'http://www.biqukan.com'  #爬取的服务器地址(获取文章内容时用)
    self.target = 'https://www.biqukan.com/73_73577/' #爬取的文章列表
    self.names = [] #章节名
    self.urls = []  #章节地址
    self.nums = []  #章节数量
    urllib3.disable_warnings()  #禁用掉运行时报出的ssl警告

3、获取文章的各章节名称、总章节数和各章节内容地址,供下载章节内容时使用

  def get_download_url(self):
    req = requests.get(url=self.target, verify=False) #不使用https验证
    req.encoding = 'gbk'  #根据爬取页面的编码设置(目标页面F12查看)
    text = req.text
    soup = BeautifulSoup(text, 'html.parser') #不加参数html.parser也可以运行,但是有预警信息
    div = soup.find_all('div', class_='listmain') #根据类型和class样式查找标签对象
    a_bf = BeautifulSoup(str(div[0]), 'html.parser')
    a = a_bf.find_all('a')
    self.nums = len(a[12:])  #剔除不必要的章节,并统计章节数
    for each in a[12:]:
      self.names.append(each.string)
      self.urls.append(self.server + each.get('href'))

4、根据章节地址,获取章节内容,并进行格式化处理

  def get_contents(self, target):
    req = requests.get(url = target, verify=False) #不使用https验证
    req.encoding = 'gbk' #根据爬取页面的编码设置(目标页面F12查看)
    text = req.text
    soup = BeautifulSoup(text, 'html.parser') #不加参数html.parser也可以运行,但是有预警信息
    texts = soup.find_all('div', class_='showtxt')
    texts = texts[0].text.replace('\xa0'*8,'\n\n') #替换掉连续的&nbsp
    texts = texts.replace('app2();','')
    pos = texts.find('(https://www.biqukan.com/73_73577/')
    texts = texts[:pos] #切除掉各章节内容最后无用的信息
    return texts

5、获取的内容,输出到本地的硬盘文件中

  def writer(self, name, path, text):
    with open(path, 'a', encoding='gbk') as f: #和爬取页面内容的编码保持一致
      f.write(name + '\n')
      f.writelines(text)
      f.write('\n\n') #换行显示

6、运行控制程序

if __name__ == '__main__':
  dl = downloader()
  dl.get_download_url()
  for i in range(dl.nums):
    dl.writer(dl.names[i], '神武斗圣.txt', dl.get_contents(dl.urls[i]))
    print(dl.names[i] + ' ---- 下载完成!')

7、运行效果
在这里插入图片描述
在这里插入图片描述

版权声明:本文为yhj_911原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yhj_911/article/details/104196725