最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

爬蟲搜索知網(wǎng)文章及摘要

2023-06-18 15:22 作者:一把江湖刀sss  | 我要投稿

這期教程是為了爬取知網(wǎng)上搜索出來的文章和摘要,建議先看上期教程:

python爬取小說教程

先看我們要爬取下面的目標:

就是上面的樣子,搜索出來的文章和摘要進行爬取,我們先打開知網(wǎng):

然后點開高級搜索:

輸入我們想要搜索的內容:

然后不要點檢索,先打開開發(fā)者選項(F12,沒反應的話看設置),檢查檢索后會進行哪些操作:

然后我們點檢索:

可以看到我們的網(wǎng)頁中顯示出了文章,下面的開發(fā)者工具中錄制了該過程發(fā)生的一些請求

爬取這個的難點在于該搜索過程網(wǎng)頁地址并沒有變化,瀏覽器上的變化是對服務器進行post請求之后由服務器返回html文件然后顯示在瀏覽器上

我們點開這個html文件可以看到,這是一個post請求:

關于post請求:
簡單理解為post請求將給服務器一些數(shù)據(jù),然后服務器根據(jù)這些數(shù)據(jù)返回給請求方相應的數(shù)據(jù)

我們可以查看post的負載(給服務器的數(shù)據(jù)):

還有他的響應(服務器返回的數(shù)據(jù)):

可以看到,返回的是一個html文件內容

在這個html文件中我們可以看到瀏覽器上顯示的數(shù)據(jù):

題目前面的是該文章的鏈接,不過是相對于該網(wǎng)站的域名而言,我們可以在其前面加上該網(wǎng)站的域名,粘貼到瀏覽器地址欄進行訪問:

注意是高級檢索頁面的域名而不是知網(wǎng)主站的域名★

和我們直接從搜索網(wǎng)頁點過去的界面相同(點之前注意關閉開發(fā)者選項的錄制)

注:進入該頁面之后會發(fā)現(xiàn)頁面的鏈接和剛剛復制訪問的鏈接時不一樣的

我們的目的時直接爬取摘要,在搜索網(wǎng)頁中可以直接點擊切換顯示按鈕顯示出摘要(注意打開開發(fā)者選項的錄制和保存日志),也可以切換顯示頁數(shù):

然后我們可以在頁面和第二個html請求中看到摘要:

然后我們檢查一下兩個html請求的負載:
第一個:

第二個:

可以看到負載的主要變化是:

  1. isSearch由true變?yōu)閒alse

  2. 多了一個SearchSql參數(shù)

當然有興趣的話可以嘗試切換每一頁的條數(shù),會導致負載的變化是改變RecordsCntPerPage值:

到了這里,我們可以有大概的思路:

使用python的requests庫模擬post請求,然后將這些數(shù)據(jù)傳輸過去,就可以得到我們要爬取的東西。

_________________________________________________________________________

理論上這個思路是可行的,我現(xiàn)在就可以說結果:

可行,但是不全可行

我遇到的問題是:我們直接模擬第二個請求的數(shù)據(jù)傳輸過去得不到我們想要的摘要,所以我們只能使用第一個請求然后一個個訪問到其中的鏈接中進行爬取里面的摘要,該文章我只寫到獲取這些文章的鏈接,至于如何爬取各個鏈接里面的摘要,請參照上個教程中的爬取小說的代碼。

_________________________________________________________________________

那么接下來我們就開始寫代碼:

代碼會放在文章末尾,我們先來分析代碼:

代碼主要圍繞著requests的post請求展開,將一系列參數(shù)定義然后傳遞進去,其中,data的參數(shù)傳遞,由于python和網(wǎng)頁上的代碼格式不同,傳參時要注意:

使用字典傳參數(shù),字典的值只能是字符串或者int類型,例如IsSearch應該傳遞字符串類型的'true'而不是布爾類型的True,QueryJson的值類似于字典類型,但是傳遞時要加上引號使其變?yōu)樽址?/span>

請求頭也是在網(wǎng)頁上查找到的(詳見上一篇教程),經(jīng)過測試,只需要保留這三個即可。

后面的代碼就是對該html進行篩選,使用BeautifulSoup里的findAll方法,尋找到a標簽,class值為"fz14"的所有列,因為他們在同一個div標簽下,所以得到的列表是個一維列表,然后使用text得到文章名,使用get方法獲取到href的值,即文章的鏈接,并把他們保存到列表中。

注意,上傳的源代碼已經(jīng)刪除本人的請求頭和Cookie,請自行獲取自己的Cookie和請求頭

代碼鏈接:

鏈接:https://pan.baidu.com/s/1zVLNiqr72a3c-BlWiDB7FQ?pwd=4567?

提取碼:4567?

—————————————————————————————————————————

關于代碼中無法爬取帶摘要的html請求的一點可能性推測:

  1. IsSearch的值變成了false,證明服務端可能并沒有進行搜索,而是根據(jù)新添加的Searchsql在數(shù)據(jù)庫中對這些文章進行查詢,將查詢到的內容再表現(xiàn)到網(wǎng)頁上

  2. 我們在python中進行第一次的請求,可以對服務端進行查詢,但是查詢到的結果并沒有存儲到某個位置,但是在網(wǎng)頁上確實已經(jīng)表達在瀏覽器上,只需要做一些類似于我們python中的操作把鏈接爬取出來,然后對數(shù)據(jù)庫進行這些文章的搜索,并返回摘要即可

個人猜測,僅供參考,注:第二個請求除了文章中提到的變化(IsSearch,Searchsql)外還有其他變化,可以自行查找

另外,如果有人找到了正確的方法,可以在評論區(qū)告訴我,感激不盡。


爬蟲搜索知網(wǎng)文章及摘要的評論 (共 條)

分享到微博請遵守國家法律
南部县| 颍上县| 铜鼓县| 江陵县| 根河市| 新建县| 车致| 沁源县| 攀枝花市| 桑日县| 乌海市| 玛曲县| 遂川县| 博野县| 乐都县| 札达县| 江北区| 鲁甸县| 永泰县| 鹤壁市| 民权县| 文昌市| 铁岭市| 丰顺县| 云霄县| 怀安县| 额尔古纳市| 旬阳县| 南部县| 通州市| 虞城县| 永城市| 平泉县| 咸宁市| 毕节市| 星子县| 张家口市| 通州区| 宽甸| 延津县| 新疆|