目錄
前一章博客
前言
主函數(shù)的代碼實現(xiàn)
逐行代碼解析
獲取鏈接
獲取標題
獲取網(wǎng)頁源代碼
獲取各個文章的鏈接
函數(shù)的代碼
導入庫文件
獲取文章的標題
獲取文章的源代碼
提取文章目錄的各個文章的鏈接
總代碼
下一章內容
前一章博客
用python從零開始做一個最簡單的小說爬蟲帶GUI界面(1/3)_木木em哈哈的博客-CSDN博客而且當時的爬蟲代碼有許多問題但是最近學了PyQt5想著搞個帶界面的爬蟲玩玩那就啥也不說開搞!??!https://blog.csdn.net/mumuemhaha/article/details/132394257?spm=1001.2014.3001.5501
前言
前一章博客我們講了怎么通過PyQt5來制作圖形化界面,并且進行一些基本設置
接下來兩章我們主要講核心爬蟲代碼的實現(xiàn)
主函數(shù)的代碼實現(xiàn)
?前一章中的代碼
self.Button_run.clicked.connect(self.F_run)
代表點擊按鈕執(zhí)行F_run函數(shù)(注意這里不要打括號)
那么我們就需要定義這個函數(shù)
思路大概就是這樣
def F_run(self):
link_1=self.line_link.text()
title_1=F_gettitle(link_1)
self.text_result.setText(f"標題獲取成功——{title_1}")
# file_1=open(f'{title_1}.txt',mode='w',encoding='utf-8 ')
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)
逐行代碼解析
獲取鏈接
首先通過
self.line_link.text()
命令獲取在輸入框中輸入的鏈接
并且把它賦值到link_1中
獲取標題
同時我會通過爬取網(wǎng)頁鏈接的源代碼進行提取關鍵字獲得文章的標題
也就是小說的名字
title_1=F_gettitle(link_1)
獲取網(wǎng)頁源代碼
爬取小說文章目錄網(wǎng)頁的源代碼并且賦值為test_1(用于后續(xù)提取各個文章的鏈接)
test_1=F_getyuan(link_1)
獲取各個文章的鏈接
search_1=F_searchlink(test_1)
把得到的源代碼進行提取篩選獲得各個文章的鏈接
其中self.text_result.setText以及self.text_result.append是在下面紅圈中顯示的東西
(美觀用,可以不加)
函數(shù)的代碼
這里為了不讓代碼過于長,我自己有單獨新建了兩個python文件用于存放python函數(shù)
導入庫文件
import requests
import re
import numpy as np
from lxml import etree
? request用于網(wǎng)絡請求
re以及l(fā)xml用于過濾源代碼的信息
而numpy用于存儲元素
獲取文章的標題
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控制臺來提取
獲取文章的源代碼
應該很好理解,就直接寫代碼了
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
這里我直接用re庫的正則來進行匹配了匹配的鏈接
注意由于匹配的鏈接不是完整鏈接
所以還需要進行拼接
?拼接完成后便可以直接打開
在這里我先存儲到數(shù)組中方便之后爬取各個文章的源代碼
然后進行返回
總代碼
main.py
import sys
# PyQt5中使用的基本控件都在PyQt5.QtWidgets模塊中
from PyQt5.QtWidgets import QApplication, QMainWindow
# 導入designer工具生成的login模塊
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}")
# file_1=open(f'{title_1}.txt',mode='w',encoding='utf-8 ')
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__":
# 固定的,PyQt5程序都需要QApplication對象。sys.argv是命令行參數(shù)列表,確保程序可以雙擊運行
app = QApplication(sys.argv)
# 初始化
myWin = MyMainForm()
# 將窗口控件顯示在屏幕上
myWin.show()
# 程序運行,sys.exit方法確保程序完整退出。
sys.exit(app.exec_())
test_1.py
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
#查詢所有小說章節(jié)鏈接
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
# #輸出文章內容
# def F_edittxt(link_3):
# 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'
# }
# trytimes = 3
# for i in range(trytimes):
# try:
# proxies = None
# test_1=requests.get(url=link_3,headers=head_qb, verify=False, proxies=None, timeout=3)
# if test_1.status_code == 200:
# break
# except:
# print(f'requests failed {i} time')
# #提取文章鏈接
# re_2='<p>(.*?)</p>'
# re_2=re.compile(re_2)
# #提取文章標題
# re_3='<h1 class="bookname">(.*?)</h1>'
# re.compile(re_3)
# test_2=np.array([])
# test_3=np.array([])
# test_2=re.findall(re_2,test_1.text)
# test_3 = re.findall(re_3, test_1.text)
# #放在數(shù)組的最后一個
# test_2=np.append(test_3,test_2)
# return test_2
下一章內容
最后獲取了所有的章節(jié)鏈接了,接下來就要爬取文章了
本來可以一起寫的(可以看到我test_1.py中注釋掉的部分),但是后面發(fā)現(xiàn)出了一些問題
才有了下一章內容文章來源:http://www.zghlxwxcb.cn/news/detail-670343.html
下一章會詳細說明的文章來源地址http://www.zghlxwxcb.cn/news/detail-670343.html
到了這里,關于用python從零開始做一個最簡單的小說爬蟲帶GUI界面(2/3)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!