第一个爬虫项目总结(爬取小说)

本文总结了一个Python爬虫项目,用于爬取网络小说。首先介绍了准备工作,包括requests、beautifulsoup4和lxml的安装。接着详细描述了如何爬取小说的第一章,然后分享了如何获取并爬取整套小说的方法。最后,作者总结了项目中遇到的乱码问题及解决方案,并提出了改进方案,如字符串处理、进度显示和多进程应用。

爬取小说总结

一、 准备工作

(1) requests安装
在cmd中,使用如下指令安装requests:
pip install requests

(2) beautifulsoup的安装
pip install beautifulsoup4

(3) lxml的安装
python3.7中lxml的安装

二、 爬取第一章

目标网站:https://www.biqukan.com/38_38836/497783246.html

import requests
from bs4 import BeautifulSoup
def getOnepage(url):
    r = requests.get(url) #通过requests.get方法get请求页面
    r.status_code  #响应状态码
    html = r.text #获取爬取下来的html元素
    saveText('test', html)

def saveText(title, context):  #将内容通过文件保存下来,方便查看
    fp = open(title+'.txt', 'a', encoding='utf-8')
    fp.write(context)
    fp.close()

if __name__ == '__main__':
    target = 'https://www.biqukan.com/38_38836/497783246.html'
    getOnepage(target)

title
在这里插入图片描述
可以看到爬取下来的hml文件已经成功保存到test.txt文件中,并且在

的标签下,唯一标签的class为’showtxt’中是小说内容,小说名称在h1标签下

下面通过beautifulsoup4,把html分解,找到所需要的标签,并获取数据

#继续改写
def getOnepage(url):
    r = requests.get(url) #通过requests.get方法get请求页面
    r.status_code  #响应状态码
    html = r.text #获取爬取下来的html元素
    soup = BeautifulSoup(html, "lxml")
    title = soup.find('h1').text #找到第一个h1标签
    text = soup.find_all('div', class_="showtxt")#找到所有class_为showtxt的div标签
    context = text[0].text
    saveText(title, context)

在这里插入图片描述
爬取内容基本满足要求,在把小说格式改写一下就ok了

三、 爬取全套小说

观察网页可以知道,每一章节都是通过下面的网页点击进入的
那么这个连接上肯定有没章节的超链接,全部获取后,再一章一章的爬取就可以了
https://www.biqukan.com/38_38836

最后整理下代码如下

import requests
from bs4 import BeautifulSoup
def getOnepage(url):
    r = requests.get(url) #通过requests.get方法get请求页面
    r.status_code  #响应状态码
    html = r.text #获取爬取下来的html元素
    soup = BeautifulSoup(html, "lxml")
    title = soup.find('h1').text
    text = soup.find_all('div', class_="showtxt")
    context = text[0].text
    saveText(title, context.replace('  ', '\n'))

def saveText(title, context):  #将内容通过文件保存下来,方便查看
    fp = open(title+'.txt', 'a', encoding='utf-8')
    fp.write(context)
    fp.close()

def getAllurl():
    target = 'https://www.biqukan.com/38_38836'
    r = requests.get(target)
    r.encoding = 'GBK'  #注意:从该网页爬取的时候发现有乱码,经确认是要使用GBK的编码格式
    html = r.text
    soup = BeautifulSoup(html, "lxml")
    ddList = soup.find_all('dd')
    for dd in ddList[0:10]:
        url = target.replace('/38_38836','') + dd.find('a')['href']
        getOnepage(url)
if __name__ == '__main__':
    getAllurl()

爬取结果
在这里插入图片描述
在这里插入图片描述

四、 总结及改进

  • [1 ]在调试过程中发现出现过乱码,主要分为以下2类
    A.从网站上爬取下来存在乱码,解决方案:在requests的时候加encoding=‘GBK’
    B.保存到文本的时候存在乱码,解决方案:在fp = open的时候加encoding=‘GBK’
    具体使用什么编码格式,视情况而定
  • [2 ] 字符串的处理不够熟练,需要加强
  • [3 ]可以加入进度显式模块,更加完善,程序可视化
  • [4 ]引入多进程的使用,加快爬取速度
  • [5 ]待定。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值