[入門級專案]採集《python進階》教程
首發於:https://mp.weixin.qq.com/s/Xo7StWY0VS2aEQi-52FNlA
前言
- 難度:入門級
- python版本:3.7
- 主要收穫:爬蟲經驗+100;python經驗+100
主要會用到python和爬蟲技術,入門級專案,偏簡單,適合新人練手,看這個之前最好是對python和爬蟲有一些瞭解
需求
需求名稱:採集《python進階》教程
網頁:https://docs.pythontab.com/interpy/
需求:採集網頁上的所有進階內容,並整理成文件
採集具體的進階教程內容即可
需求分析
我們看下需求,需要採集的東西並不是很多,我們先開啟網頁看一下
看下目錄,資料量不是很多
大致數了一下就幾十個頁面,這很少了
對應下需求,根據經驗,列下我們需要解決的一些問題
- 單頁面抓取問題
- 多頁面url獲取問題
- 整理成文件
單頁面抓取問題
這個問題其實就是看下抓取頁面的請求構造
我們先找下原始碼中是否有包含我們所需要的資料
在頁面上找個稍微特殊的詞
比如說 “小清新”
鍵盤按下ctrl+U檢視下原始碼
在按下ctrl+F,查詢“小清新”
可以看到,原始碼中就直接有我們所需要的資料,那麼可以判斷,這八成就是一個get請求
如果沒有反爬,那就比較簡單了
直接構建一個最簡單的get請求試一下
import requests r = requests.get('https://docs.pythontab.com/interpy/') print(r.text) print(r)
執行一下,列印輸出的是有我們需要的資料(由於太多就不貼了),完美!
多頁面url獲取問題
我們可以看到所需要採集的頁面幾十個,並不是很多,就需求目標而言,我們其實是可以一個個的複製下來,但是這樣沒有技術範兒,而且如果說我們採集的頁面很多呢,幾百幾千,甚至幾十萬,手動複製的效率實在過於低下
我們開啟網頁
可以看到有個Next按鈕
這裡就有下一頁的url
我們跳到最後一頁,就會發現Next沒有了
那麼我們是不是就可以通過這種方式來拿到各個頁面的url
我們一直去提Next按鈕獲取下一頁的url,直到最後一頁,沒有Next,判斷結束
整理成文件
本來想將抓取到的內容(去標籤)儲存成txt的,然後在轉成pdf格式,好看一些
不過由於儲存的內容沒有格式,轉換後並不好看,所以決定不去標籤,直接存成html檔案
然後在轉換成pdf
這裡有個線上的將html轉成pdf,還是滿好用的:https://www.aconvert.com/cn/ebook/
程式碼實現
邏輯理清了,程式碼實現就比較簡單了
直接上下程式碼
import requests
from lxml import etree
from urllib import parse
def get_html(url):
"""網頁採集資料,並儲存到檔案中
Args:
url (str): 待採集的url
Returns:
str: 下一頁的url
"""
r = requests.get(url)
html = etree.HTML(r.text)
content = html.xpath('//div[@role="main"]')
content0 = etree.tostring(content[0])
# print(content0)
with open("python進階教程.html","ab+") as f:
f.write(content0)
_next = html.xpath("//a[contains(text(),'Next »')]/@href")
if not _next:
return ''
nexturl = parse.urljoin(url,_next[0])
print(nexturl)
return nexturl
url = 'https://docs.pythontab.com/interpy/'
while 1:
url = get_html(url)
if not url:
break
執行程式碼會在當前目錄生成一個python進階教程.html
檔案
開啟看一眼
還是可以的,不過我這裡把它轉換成更通用的pdf型別
html轉換成pdf
先開啟線上轉換的網頁:https://www.aconvert.com/cn/ebook/
選擇html檔案
選擇轉換的目標格式
點選轉換
下載檔案
開啟pdf看一下
格式還是很完美的!
注:
其實python有個pdfkit
庫,可以將一個html轉換成pdf,有興趣的朋友可以嘗試下
關注我獲取更多內容
注:轉載還請註明出處,謝謝_