看了好幾天的爬蟲,終於有點眉目,於是寫了第乙個單執行緒爬蟲,問題很多,但功能基本實現了
簡單記錄一下,以後可以翻看回憶
這裡爬取的是努努書坊的《龍族五》,原網頁鏈結如下:
先擼一下基本框架結構:
1)使用request獲取網頁原始碼
2)使用正規表示式提取內容
3)檔案操作,寫入檔案儲存檔案
檢查網頁元素,很容易可以找出特別的地方,
.........
正文第1章 全民公敵(1)
第153章 但為君故(57)
這一塊就是主頁的目錄部分,可以從中提取出每一章節的連線位址,這裡提出來的是邏輯位址,後續用到的時候需要轉化為絕對位址
如 a href=「197940.html」>第152章 但為君故(56) // 197940.html 就是我們想要的位址
這就是第乙個功能的實現思路,提取出每個章節的位址
**如下:
`def get_toc(html):
「」"
:param html: 傳入網頁原始碼
:return: 輸出每一章節的絕對鏈結
"""toc_url_list =
toc_block = re.findall('正文(.*?)第', toc_block, re.s)
for url in toc_l:
return toc_url_list`
然後是第二部分,依次遍歷每乙個網頁,獲取原始碼後提取章節目錄,然後提取章節內容
def
get_text
(toc_list)
:"""
依次請求獲取每個章節的原網頁,然後依次存入章節列表中
:param toc_list: 每一章節的位址
:return: heard-章節名,text-章節文字
"""heard_list =
text_list =
for toc in toc_list:
html_text = requests.get(toc)
.content.decode(
"gbk"
) heard = re.search(
'h1>(.*?)
', html_text, re.s)
.group(1)
text = re.search(
'', html_text, re.s)
.group(1)
# text_temp_1 = text.replace('', '')
# text_temp_2 = text_temp_1.replace(' ', '')
text_temp1 = re.findall(
'(.*? )'
,text,re.s)
text_temp_2 = text.replace(text_temp1[1]
,'')return heard_list, text_list
這一部分也比較容易理解,最後一部分就是寫入操作,這裡匯入os模組是為了方便寫入時路徑的查詢
def
write_text
(heard, text_list)
:"""
:param heard:章節名
:param text: 章節內容
:return:
"""os.makedirs(
'龍族v'
, exist_ok=
true
)for i in
range
(len
(heard)):
chart = heard[i]
text = text_list[i]
with
open
(os.path.join(
'龍族v'
, chart +
'.txt'),
'w', encoding=
'utf-8'
)as f:
f.write(text)
到這裡程式就完了,有個問題是每一章節的開頭「 」部分沒有被替換完,後續可以圖形介面操作也比較容易
缺點是單執行緒的話run的比較慢,寬頻只能跑30kp左右,明天會改進多執行緒
結果如下
:param html: 傳入網頁原始碼
:return: 輸出每一章節的絕對鏈結
"""toc_url_list =
toc_block = re.findall(
'正文(.*?), html, re.s)[0
] toc_l = re.findall(
'a href="(.*?)">第'
, toc_block, re.s)
for url in toc_l:
return toc_url_list
defget_text
(toc_list)
:"""
依次請求獲取每個章節的原網頁,然後依次存入章節列表中
:param toc_list: 每一章節的位址
:return: heard-章節名,text-章節文字
"""heard_list =
text_list =
for toc in toc_list:
html_text = requests.get(toc)
.content.decode(
"gbk"
) heard = re.search(
'h1>(.*?)
', html_text, re.s)
.group(1)
text = re.search(
'', html_text, re.s)
.group(1)
# text_temp_1 = text.replace('', '')
# text_temp_2 = text_temp_1.replace(' ', '')
text_temp1 = re.findall(
'(.*? )'
,text,re.s)
text_temp_2 = text.replace(text_temp1[1]
,'')return heard_list, text_list
defwrite_text
(heard, text_list)
:"""
:param heard:章節名
:param text: 章節內容
:return:
"""os.makedirs(
'龍族v'
, exist_ok=
true
)for i in
range
(len
(heard)):
chart = heard[i]
text = text_list[i]
with
open
(os.path.join(
'龍族v'
, chart +
'.txt'),
'w', encoding=
'utf-8'
)as f:
f.write(text)
if __name__ ==
'__main__'
: toc_list = get_toc(html)
heard, text = get_text(toc_list)
write_text(heard, text)
python爬蟲 第乙個爬蟲
1.本地安裝了nginx,在預設的html目錄下建立測試html 如圖,即index.html導向a,b,c 3個html,a.html又可以導向aa,bb兩個html,c.html可以導向cc.html。2.修改nignx配置使得本地可以訪問寫的kmtest裡的index.html。參考文件 ng...
第乙個爬蟲
很多人學習python的目的就是為了學習能夠實現爬蟲的功能,這裡,我使用了scrapy框架來實現了乙個簡單的爬蟲功能,這裡我簡單的介紹一下scrapy專案的建立,和執行。1,第一步是安裝scrapy,我相信到了這一步,大多數人都已經會安裝第三方庫檔案了,這裡主要是使用命令pip install sc...
第乙個爬蟲
一 程式測試 二 開啟360網頁 三 html計算 四 中國大學排名 爬取年費2018 五 函式介紹總結 1.requests 庫的網頁請求函式 函式 說明 get url timeout n 對應http的get方式,設定請求超時時間為n秒 post url,data 對應http的post方式,...