程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

[Python crawler combat] Do not produce novels, only porters of the website, too awesome~ (with source code)

編輯:Python

前言

遇見你時,漫天星河皆為浮塵

不知從什麼時候開始.小說開始掀起了一股浪潮,它讓我們平日裡的生活不在枯燥乏

味,很多我們做不到的事情在小說裡都能輕易實現.

那麼話不多說,下面我們就來具體看看它是如何實現的吧??

正文

這裡以一部小說為例,將每一章的內容爬取下來保存到本地.

??是我們要爬的小說目錄

爬取下來的數據:

分析網頁拿數據

首先利用requests庫的強大能力,向目標發起請求,拿到頁面中的所有HTML數據.

url(https://www.biduo.cc/biquge/40_40847/)

需要注意的是:請求太多次很容易被反爬,最好在請求時帶上請求頭(模擬浏覽器發請求),每個人

的浏覽器的請求頭都不同,不能直接使用我代碼中的請求頭,怎麼獲取自己的請求頭可按如下圖方

式拿到:

拿到所有HTML數據後,利用正則庫結合xpath語法(可以自己去學一下XPath教程)從中抽取章名和

每一章的鏈接,如下圖//*[@id=“list”]/dl/dd/a/text()和//*[@id=“list”]/dl/dd/a/@href即可拿到我們需

要的章節名稱和對應的鏈接地址:

現在已經拿到我們需要的章節名稱和對應每一章的鏈接地址了,這裡得到的每一章的鏈接地址還不

是一個完整的url地址,分析地址欄可知目標url(https://www.biduo.cc/biquge/40_40847/)與每一

章的鏈接地址拼接,即可得到我們最終所需的URL.

# 2. 請求文章拿到HTML數據,抽取文章內容並保存

得到最終URL後,層層遞進,相同的方法:向最終的URL地址發起請求得到小說內容頁的所有

HTML數據,再從中抽取我們需要的小說文字內容,並保存到本地以我們抽取到的章名來命名文

件:

# 2. 請求文章拿到HTML數據,抽取文章內容並保存

效果展示——

代碼展示——

import requests
from lxml import etree
url = "https://www.biduo.cc/biquge/40_40847/"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}
class Spider(object):
def detail_request(self):
# 1. 請求目錄拿到HTML數據,抽取章名、章鏈接
response = requests.get(url,headers=headers)
# print(response.content.decode('gbk'))
html = etree.HTML(response.content.decode('gbk')) # 整理文檔對象
# print(html)
tit_list = html.xpath('//*[@id="list"]/dl/dd/a/text()')
url_list = html.xpath('//*[@id="list"]/dl/dd/a/@href')
print(tit_list,url_list)
for tit, src in zip(tit_list, url_list):
self.content_request(tit, src)
def content_request(self, tit, src):
# 2. 請求文章拿到HTML數據,抽取文章內容並保存
response = requests.get(url + src,headers=headers)
html = etree.HTML(response.content.decode('gbk')) # 整理文檔對象
content = "
".join(html.xpath('//*[@id="content"]/text()'))
file_name = tit + ".txt"
print("正在保存文件:{}".format(file_name))
with open(file_name, "a", encoding="utf-8") as f:
f.write(content)
spider = Spider()
spider.detail_request()

總結

好啦!文章到這裡就正式結束,比起聽歌我還是更喜歡看小說的啦!

大家喜歡什麼項目可以評論區留言哦~

有問題或者需要視頻學習的可以找我溝通哈??

完整的素材源碼等:可以滴滴我吖!或者點擊文末hao自取免費拿的哈~

??往期推薦閱讀——

項目0.1【Python爬蟲系列】Python爬蟲入門並不難,甚至入門也很簡單(引言)項目0.2

項目0.3?Python爬蟲入門推薦案例:學會爬蟲_表情包手到擒來~

項目0.4【Tkinter界面化小程序】用Python做一款免費音樂下載器、無廣告無彈窗、清爽超流暢哦

項目0.5【Python爬蟲系列】淺嘗一下爬蟲40例實戰教程+源代碼【基礎+進階】

項目0.6【Python爬蟲實戰】使用Selenium爬某音樂歌曲及評論信息啦~

??文章匯總——

Python文章合集 | (入門到實戰、游戲、Turtle、案例等)

(文章匯總還有更多你案例等你來學習啦~源碼找我即可免費!)

先自我介紹一下,小編13年上師交大畢業,曾經在小公司待過,去過華為OPPO等大廠,18年進入阿裡,直到現在.深知大多數初中級java工程師,想要升技能,往往是需要自己摸索成長或是報班學習,但對於培訓機構動則近萬元的學費,著實壓力不小.自己不成體系的自學效率很低又漫長,而且容易碰到天花板技術停止不前.因此我收集了一份《java開發全套學習資料》送給大家,初衷也很簡單,就是希望幫助到想自學又不知道該從何學起的朋友,同時減輕大家的負擔.添加下方名片,即可獲取全套學習資料哦


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved