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

it2025-03-03  28

爬取小说总结

一、 准备工作

(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)

可以看到爬取下来的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 ]待定。。。
最新回复(0)