目录
前一章博客
前言
主函数的代码实现
逐行代码解析
获取链接
获取标题
获取网页源代码
获取各个文章的链接
函数的代码
导入库文件
获取文章的标题
获取文章的源代码
提取文章目录的各个文章的链接
总代码
下一章内容
前一章博客
用python从零开始做一个最简单的小说爬虫带GUI界面(1/3)_木木em哈哈的博客-CSDN博客而且当时的爬虫代码有许多问题但是最近学了PyQt5想着搞个带界面的爬虫玩玩那就啥也不说开搞!!!
https://blog.csdn.net/mumuemhaha/article/details/132394257?spm=1001.2014.3001.5501
前言
前一章博客我们讲了怎么通过PyQt5来制作图形化界面,并且进行一些基本设置
接下来两章我们主要讲核心爬虫代码的实现

主函数的代码实现
前一章中的代码
1
| self.Button_run.clicked.connect(self.F_run)
|
代表点击按钮执行F_run函数(注意这里不要打括号)
那么我们就需要定义这个函数
思路大概就是这样
1 2 3 4 5 6 7 8 9 10 11
| def F_run(self): link_1=self.line_link.text() title_1=F_gettitle(link_1) self.text_result.setText(f"标题获取成功——{title_1}") test_1=F_getyuan(link_1) self.text_result.setText("提取源代码成功") time.sleep(1) search_1=F_searchlink(test_1) self.text_result.append("提取文章链接成功") pachong(search_1,title_1)
|
逐行代码解析
获取链接
首先通过
命令获取在输入框中输入的链接
并且把它赋值到link_1中
获取标题
同时我会通过爬取网页链接的源代码进行提取关键字获得文章的标题
也就是小说的名字
1
| title_1=F_gettitle(link_1)
|
获取网页源代码
爬取小说文章目录网页的源代码并且赋值为test_1(用于后续提取各个文章的链接)
1
| test_1=F_getyuan(link_1)
|
获取各个文章的链接
1
| search_1=F_searchlink(test_1)
|
把得到的源代码进行提取筛选获得各个文章的链接
其中self.text_result.setText以及self.text_result.append是在下面红圈中显示的东西
(美观用,可以不加)

函数的代码
这里为了不让代码过于长,我自己有单独新建了两个python文件用于存放python函数
导入库文件
1 2 3 4
| import requests import re import numpy as np from lxml import etree
|
request用于网络请求
re以及lxml用于过滤源代码的信息
而numpy用于存储元素
获取文章的标题
1 2 3 4 5 6 7 8 9
| def F_gettitle(link_0): head_qb={ 'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36' } test_1=requests.get(url=link_0,headers=head_qb) test_yuan=test_1.text dom=etree.HTML(test_yuan) test_2=dom.xpath('/html/body/article[1]/div[2]/div[2]/h1/text()') return test_2[0]
|
很简单的一个的结构
由requests来获取源代码
之后用lxml中的tree来筛选源代码
(用xpath路径时最后要加text()输出文本形式,不然出不了源代码)
xpath路径可以通过按f12控制台来提取

获取文章的源代码
应该很好理解,就直接写代码了
1 2 3 4 5 6 7 8
| def F_getyuan(link_1): head_qb={ 'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36' } test_1=requests.get(url=link_1,headers=head_qb) test_yuan=test_1.text test_yuan=str(test_yuan) return test_yuan
|
提取文章目录的各个文章的链接
1 2 3 4 5 6 7 8 9 10
| def F_searchlink(link_2): re_1='<a id="haitung" href="(.*?)" rel="chapter">' re_1=re.compile(re_1) link_3=re.findall(re_1,link_2) link_max=np.array([]) for link_1 in link_3: link_4=f'http://www.biquge66.net{link_1}' link_max=np.append(link_max,link_4)
return link_max
|
这里我直接用re库的正则来进行匹配了匹配的链接
注意由于匹配的链接不是完整链接
所以还需要进行拼接

拼接完成后便可以直接打开
在这里我先存储到数组中方便之后爬取各个文章的源代码
然后进行返回
总代码
main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from win import Ui_MainWindow from test_1 import * import time class MyMainForm(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super(MyMainForm, self).__init__(parent) self.setupUi(self) self.Button_close.clicked.connect(self.close) self.Button_run.clicked.connect(self.F_run)
def F_run(self): link_1=self.line_link.text() title_1=F_gettitle(link_1) self.text_result.setText(f"标题获取成功——{title_1}") test_1=F_getyuan(link_1) self.text_result.append("提取源代码成功") time.sleep(1) search_1=F_searchlink(test_1) self.text_result.append("提取文章链接成功") pachong(search_1,title_1)
if __name__ == "__main__": app = QApplication(sys.argv) myWin = MyMainForm() myWin.show() sys.exit(app.exec_())
|
test_1.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| import requests import re import numpy as np from lxml import etree
def F_gettitle(link_0): head_qb={ 'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36' } test_1=requests.get(url=link_0,headers=head_qb) test_yuan=test_1.text dom=etree.HTML(test_yuan) test_2=dom.xpath('/html/body/article[1]/div[2]/div[2]/h1/text()') return test_2[0]
def F_getyuan(link_1): head_qb={ 'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36' } test_1=requests.get(url=link_1,headers=head_qb) test_yuan=test_1.text test_yuan=str(test_yuan) return test_yuan
def F_searchlink(link_2): re_1='<a id="haitung" href="(.*?)" rel="chapter">' re_1=re.compile(re_1) link_3=re.findall(re_1,link_2) link_max=np.array([]) for link_1 in link_3: link_4=f'http://www.biquge66.net{link_1}' link_max=np.append(link_max,link_4)
return link_max
|
下一章内容
最后获取了所有的章节链接了,接下来就要爬取文章了
本来可以一起写的(可以看到我test_1.py中注释掉的部分),但是后面发现出了一些问题
才有了下一章内容
下一章会详细说明的
用python从零开始做一个最简单的小说爬虫带GUI界面(2/3)