【python博客爬虫】

目录
1 绪论 1
1.1 任务书 1
1.2 学生选课系统功能概述 2
1.3 课程设计创新点概述 2
2 相关技术简介 1
2.1 Python语言 1
2.2 网络爬虫技术 1
2.3 本章小结 1
3 需求分析 2
3.1 功能性需求分析 2
3.1.1 目标网站 2
3.1.2 目标的内容 2
3.1.3 流程分析 2
3.1.4 程序设计分析 2
3.1.5 数据需求分析 3
3.2 非功能性需求分析 3
3.2.1 开发环境 3
3.3 本章小结 3
4 设计与实现 4
4.1 主函数模块设计 4
4.2 标题、时间等信息获取模块的设计与实现 4
4.3 链接获取模块 5
4.4 获取正文模块的设计与实现 5
4.5 文件保存模块 6
4.6 本章小结 6
5 运行及调试 7
5.1 运行结果 7
5.2 本章小结 8
6 总结和展望 9
6.1 总结 9
6.2 展望 9
附录1:源代码 10

1绪论
1.1任务书
课程设计题目: 博客爬虫
项目基本要求:
1、基本要求:
(1)复习并深入理解网络爬虫理论,结合相关技术进行开发;
(2)掌握Python编程语言,熟悉相关正则表达式的使用;
(3)研究并掌握爬虫相关模块的思想和爬虫的开发流程;
(4)对爬虫的要求进行详细描述;
(5)设计过程严格按照爬虫的标准流程。
2、创新要求:
在基本要求达到后,可进行创新设计,如用数据库实现爬取文件的保存。
设计方法和基本原理:
1、问题描述(功能要求):
目标网站:https://www.kingname.info/archives/。
目标内容:如下图所示内容,包括文章标题、发布时间、文章分类、文章链接、文章正文(HTML格式)。

(1)爬取列表页第1页所有的文章标题和文章详情;
(2)并保存爬取信息;
(3)截取与正文相关的源代码并保存;
2、问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
(1)完成相关模块和第三方库的安装配置;
(2)根据问题描述,设计提取方法;
(3)将结果进行保存
(4)功能调试;
(5)完成系统总结报告以及系统使用说明书。
1.2学生选课系统功能概述
通过相关函数应用,完成博客文章爬虫并保存。
1.3课程设计创新点概述
储存到word文档里边,方便查看

2相关技术简介
2.1Python语言
Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990 年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
2.2网络爬虫技术
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。
网络爬虫的第一步就是根据URL,获取网页的HTML信息。在Python3中,可以使用urllib.request和requests进行网页爬取。
urllib库是python内置的,无需我们额外安装,只要安装了Python就可以使用这个库。
requests库是第三方库,需要我们自己安装。

2.3本章小结
本章主要介绍了博客爬虫任务与相关技术介绍。
略。

3需求分析
3.1功能性需求分析
3.1.1目标网站
https://www.kingname.info/archives/。
3.1.2目标的内容
本的目标内容包括文章标题、发布时间、文章分类、文章链接、文章正文(HTML格式)。

2.2.1爬取列表页第1页所有的文章标题和文章详情;
通过页面的分析去找到文章标题的和标题里面对应的文章详细的内容。
2.2.2保存爬虫得到的信息;
将爬取得到的临时信息存储到创建的SQLite数据库中。
3.1.3流程分析
第一步,获取整个网页的HTML信息;
第二步,解析 HTML 信息,提取我们所需的内容;
第三步,保存内容。

图4.1 学生选课系统流程图
3.1.4程序设计分析
面向过程编程。
第一步,获取获取整个网页的HTML信息
第二步,解析HTML信息
第三步,获取文章标题
第四步,获取文章发布时间
第五步,保存标题和时间
第六步,获取文章内容
第七步,保存文章内容
3.1.5数据需求分析
选取保存到word文档
采用“python-docx”库
3.2非功能性需求分析
3.2.1开发环境
(1)操作系统:Window 10;
(2)Python版本:3.9
(3)开发工具:PyCharm;
(4)Python内置模块:
(5)第三方模块:
beautifulsoup4 4.9.3 4.9.3
python-docx 0.8.11 0.8.11
requests 2.25.1 2.25.1

(6)开发语言环境:Python;
(7)CPU:Intel® Core™ i7-10510U CPU @ 1.80GHz 2.30 GHz;
(8)内存:8.00 GB (7.83 GB 可用)
3.3本章小结
本章叙述了博客爬虫的需求分析和开发环境

4设计与实现
4.1主函数模块设计
该模块提供管理系统的主函数,是程序的唯一入口和出口,主函数模块提供调用各子模块。
主要代码如所示。

爬虫的第一步,获取整个网页的HTML信息---------------------------------------

target =‘https://www.kingname.info/archives/’
server = ‘https://www.kingname.info’
req = requests.get(url=target)
def maino():
file.setData(XinXi.getBt(), XinXi.getTime())
file.setData_docx(XinXi.getBt())
ZhengWen.zw(LianJie.lj())
if name == ‘main’:
maino()
代码 4.1主函数模块计与实现
4.2标题、时间等信息获取模块的设计与实现
标题、时间等信息获取模块是获取博客文章标题和发布时间的函数。实现此模块的主要代码如代码4.2所示。
data_bt=[]
data_time=[]

爬虫的第二步,解析 HTML 信息,提取我们感兴趣的内容。--------------------------

def getBt():
html = wdmain.req.text
bf = BeautifulSoup(html, “html.parser”)
texts_tm = bf.find_all(‘span’, itemprop=‘name’)
for aa in range(0, 10):
data_bt.append(“文章标题:”+texts_tm[aa].text+“\n”)
return data_bt

def getTime():
html = wdmain.req.text
bf = BeautifulSoup(html, “html.parser”)
texts_time = bf.find_all(‘div’, class_=‘post-meta’)
for aa in range(0, 10):
data_time.append(“发布时间:” +texts_time[aa].text)
return data_time

代码4.2 标题、时间等信息获取模块主要功能代码
4.3链接获取模块
链接获取模块是获取不同博客文章链接的模块。实现此模块的主要代码如代码4.3所示

def lj():
html = wdmain.req.text
bf = BeautifulSoup(html, “html.parser”)

texts = bf.find_all('div', class_='posts-collapse')  # 目录的总的
a_bf = BeautifulSoup(str(texts[0]), "html.parser")
a = a_bf.find_all('a')

szlj = []
for i in a:
    szlj.append(wdmain.server + i.get('href'))
    # print(wdmain.server + i.get('href'))
return szlj

代码4.3 链接获取模块主要功能代码

4.4获取正文模块的设计与实现
获取正文模块是获取博客文章的函数。实现此模块的主要代码如代码4.4所示
def zw(szlj):
# 爬虫的第一步,获取整个网页的HTML信息---------------------------------------

for i in range(0, 10):
    req = requests.get(url=szlj[i])
    # 爬虫的第二步,解析 HTML 信息,提取我们感兴趣的内容。--------------------------
    html = req.text
    bf = BeautifulSoup(html, "html.parser")
    texts = bf.find_all('div', class_='post-body')

    Doc = Document('爬虫文章.docx')
    Doc.add_heading(str(i+1)+XinXi.getBt()[i],level=1)
    Doc.add_heading(XinXi.getTime()[i],level=2)
    Doc.add_paragraph(texts[0].text)
    Doc.save('爬虫文章.docx')

代码 4.4获取正文模块主要功能代码

4.5文件保存模块
文件保存模块是保存博客文章标题和文章链接的函数。实现此模块的主要代码如代码4.5所示
def setData_docx(data_bt):
for i in range(0,10):
Doc = Document(‘爬虫文章.docx’)
Doc.add_heading(str(i+1)+data_bt[i], level=1)
Doc.add_paragraph(LianJie.lj()[i])

    Doc.save('爬虫文章.docx')

代码 4.5 文件保存模块主要功能代码

4.6本章小结
本章描述了主要功能模块的设计与实现。

5运行及调试
5.1运行结果
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.2本章小结
本章展示了程序运行的过程与结果,展示了爬取内容存放发文档。

6总结和展望
6.1总结
本次课程设计,我从头开始,找方法,找文档,遇到不会的就在csdn 百度等网站搜索解决办法,查看官方文档,在摸索中学习,编程。我知道了爬虫的原理和如何要爬取一个自己所需要的内容。最终完成此次课程设计
6.2展望
本系统还有很对不足之处,比如保存图片功能因为时间原因没有实现,接下来我会继续完善此功能;我的代码还有不合理的地方,还需要继续优化。

附录1:源代码
(1)wdmain.py文件
该文件主要是程序的主函数

包括文章标题、发布时间、文章分类、文章链接、文章正文(HTML格式)。

import null as null
from bs4 import BeautifulSoup
import requests # 用null时导入的
import XinXi
import LianJie
import ZhengWen
import file

import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding=‘gb2312’)

爬虫的第一步,获取整个网页的HTML信息---------------------------------------

target =‘https://www.kingname.info/archives/’
server = ‘https://www.kingname.info’
req = requests.get(url=target)

def maino():
file.setData(XinXi.getBt(), XinXi.getTime())

file.setData_docx(XinXi.getBt())

ZhengWen.zw(LianJie.lj())

if name == ‘main’:
maino()

(2)XinXi.py文件
该文件主要是用来获取文章信息
import null as null
from bs4 import BeautifulSoup
import requests # 用null时导入的
import wdmain

data_bt=[]
data_time=[]

爬虫的第二步,解析 HTML 信息,提取我们感兴趣的内容。--------------------------

def getBt():
html = wdmain.req.text
bf = BeautifulSoup(html, “html.parser”)
texts_tm = bf.find_all(‘span’, itemprop=‘name’)
for aa in range(0, 10):
data_bt.append(“文章标题:”+texts_tm[aa].text+“\n”)
return data_bt

def getTime():
html = wdmain.req.text
bf = BeautifulSoup(html, “html.parser”)
texts_time = bf.find_all(‘div’, class_=‘post-meta’)
for aa in range(0, 10):
data_time.append(“发布时间:” +texts_time[aa].text)
return data_time

(2)LianJieI.py文件
该文件主要是用来获取文章链接
import null as null
from bs4 import BeautifulSoup
import requests # 用null时导入的
import wdmain
import file

def lj():
html = wdmain.req.text
bf = BeautifulSoup(html, “html.parser”)

texts = bf.find_all('div', class_='posts-collapse')  # 目录的总的
a_bf = BeautifulSoup(str(texts[0]), "html.parser")
a = a_bf.find_all('a')

szlj = []
for i in a:
    szlj.append(wdmain.server + i.get('href'))
    # print(wdmain.server + i.get('href'))
return szlj

if name == ‘main’:
lj()
file.setData_lj(lj())

(2)file.py文件
该文件主要是用来保存文章信息
import XinXi
import LianJie
from docx import Document
def setDat_bt(data_bt):
fo = open(“文章详情.txt”, “r+”)
# str2 = texts_time[aa].text
fo.seek(0, 2)
for i in range(0, 10):
fo.write(data_bt[i])
# line = fo.write(XinXi.getTime())
def setDat_time(data_time):
fo = open(“文章详情.txt”, “r+”)
# str2 = texts_time[aa].text
fo.seek(0, 2)
for i in range(0, 10):
fo.write(data_time[i])
def setData(data_bt,data_time):
fo = open(“文章详情.txt”, “r+”)
# str2 = texts_time[aa].text
fo.seek(0, 2)
for i in range(0, 10):
fo.write(data_bt[i]+data_time[i])
def setData_lj(data_lf):
fo = open(“文章详情.txt”, “r+”)
# str2 = texts_time[aa].text
fo.seek(0, 2)
for i in range(0, 10):
fo.write(data_lf[i])
def setData_docx(data_bt):
for i in range(0,10):
Doc = Document(‘爬虫文章.docx’)
Doc.add_heading(str(i+1)+data_bt[i], level=1)
Doc.add_paragraph(LianJie.lj()[i])
Doc.save(‘爬虫文章.docx’)

(2)ZhengWen.py文件
该文件主要是用来获取和保存文章正文内容
import null as null
from bs4 import BeautifulSoup
import requests # 用null时导入的
import XinXi
from docx import Document
def zw(szlj):
# 爬虫的第一步,获取整个网页的HTML信息---------------------------------------

for i in range(0, 10):
    req = requests.get(url=szlj[i])
    # 爬虫的第二步,解析 HTML 信息,提取我们感兴趣的内容。--------------------------
    html = req.text
    bf = BeautifulSoup(html, "html.parser")
    texts = bf.find_all('div', class_='post-body')

    Doc = Document('爬虫文章.docx')
    Doc.add_heading(str(i+1)+XinXi.getBt()[i],level=1)
    Doc.add_heading(XinXi.getTime()[i],level=2)
    Doc.add_paragraph(texts[0].text)
    Doc.save('爬虫文章.docx')

(2)file_docx.py文件
该文件主要是用来保存文章信息
from docx import Document
import XinXi
import ZhengWen

Doc = Document()
Doc.add_heading(“hhhh”,level=1)
Doc.save(‘test.docx’)

def setDocx():
Doc.add_heading(XinXi.getBt())
Doc.add_heading(XinXi.getTime())
Doc.add_heading(ZhengWen)

博客爬虫.docx 自己写的谨慎借鉴,小白

链接的具体详细内容 可能写的不好

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值