一文學(xué)會利用python解決文章付費(fèi)限制問題
本次爬蟲思路
最最重要的是分析信息接口?。?!
1. 獲取url
2. 通過請求拿到響應(yīng)
3. 處理反爬
4. 提取信息
5. 保存內(nèi)容
本次操練網(wǎng)頁
https://www.duanmeiwen.com/xinshang/3203373.html(某美文網(wǎng))
網(wǎng)頁內(nèi)容:
?一.爬蟲模板
??1.urllib庫的使用模板
import urllib.request url ='xxxxxxxxxxxx' #發(fā)送請求 request= urllib.request.Request(url,data,header) #得到響應(yīng) response=urllib.request.urlopen(request) #解碼 content = response.read().decode() #查看數(shù)據(jù) print(content)
??2.requests庫的使用模板
import requests url ='xxxxxxxxxxxx' #發(fā)送請求 response = request.get(url, params,headers) (get請求或者post請求) #根據(jù)響應(yīng)的格式解碼,非常智能 response.encoding=response.appareent_encoding #查看數(shù)據(jù) print(response.txt)
?二.分析信息接口
1.首先右鍵查看網(wǎng)頁源代碼
很明顯,爬取的信息就在源代碼里,所以直接對網(wǎng)頁鏈接發(fā)起請求。這里請求頭偽裝我們優(yōu)先攜帶user-agent。
?三.通過請求拿到響應(yīng)
import requests # 需要請求的url url = 'https://www.duanmeiwen.com/xinshang/3203373.html' # 偽裝請求頭 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', } # 獲得響應(yīng) response = requests.get(url=url, headers=headers) # 智能解碼 response.encoding = response.apparent_encoding # 打印數(shù)據(jù) print(response.text)
?四. 提取信息
針對返回數(shù)據(jù)的特點(diǎn),我們現(xiàn)在有三種方法:
??1.正則表達(dá)式
正則表達(dá)式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”))操作的一種邏輯公式,就是用事先定義好的一些特定字符及這些特定字符的組合,組成一個“規(guī)則字符串”,這個“規(guī)則字符串”用來表達(dá)對字符串的一種過濾邏輯。正則表達(dá)式是一種文本模式,該模式描述在搜索文本時要匹配的一個或多個字符串。簡單來說,利用一定的邏輯公式,過濾掉不需要的數(shù)據(jù),主要處理字符串。對于本題來說有點(diǎn)殺雞用牛刀了。簡單來示范一下:
首先導(dǎo)入re模塊
import re
接下來開始操作這堆"字符串"
re.compile()是用來優(yōu)化正則的,它將正則表達(dá)式轉(zhuǎn)化為對象,re.search(pattern, string)的調(diào)用方式就轉(zhuǎn)換為 pattern.search(string)的調(diào)用方式,多次調(diào)用一個正則表達(dá)式就重復(fù)利用這個正則對象,可以實現(xiàn)更有效率的匹配。需要搭配finditer()等一起使用,參數(shù)pattern : 正則表達(dá)式;,flags : 表示匹配模式。
右鍵點(diǎn)擊檢查進(jìn)入Network頁面,主要是方便我們看清楚結(jié)構(gòu)。
效果
這里寫的比較粗糙,因為大家會發(fā)現(xiàn)我們會大量在重復(fù)寫一個相同的篩選語句,所以就有那么一點(diǎn)機(jī)械重復(fù)的感覺,而且我們有專門對付這中HTML結(jié)構(gòu)的工具,所以接下來咱們隆重介紹XPath!
??2.XPath
XPath即為XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。XPath基于XML的樹狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹中找尋節(jié)點(diǎn)的能力。起初XPath的提出的初衷是將其作為一個通用的、介于XPointer與XSL間的語法模型。但是XPath很快地被開發(fā)者采用來當(dāng)作小型查詢語言。我們只要簡單理解為它主要是針對定位HTML中某部分位置的語言。
首先導(dǎo)入XPath
from lxml import etree
接下來開始操作
效果
這就是優(yōu)雅,對比上面,我們用三行代碼就完成了任務(wù),由此可見,用對方法很重要。
?? 3.漂亮的湯(BeautifulSoup)<本次不使用>
?五.保存內(nèi)容
這里就很簡單,基礎(chǔ)文件操作的知識,“行百里者半九十”,來吧,咱們直接一口氣寫完。
tree = etree.HTML(response.text) titles = tree.xpath('/html/body/div[2]/div[2]/div/div[2]/h2/text()') message = tree.xpath('/html/body/div[2]/div[2]/div/div[2]/p/text()') for i in range(len(message)): with open('優(yōu)美文藝句子.txt', 'a', encoding='utf-8') as fp: fp.write(message[i]) fp.write('\n') print('文章爬取完成')
效果
?六.總結(jié)(附完整代碼)
過今天的小案例,我們明白了,第一,思路一定要清楚,快準(zhǔn)狠分析出接口鏈接,第二,提取數(shù)據(jù)的方法要正確,這樣會直接事半功倍,好了,今天就分享到這里,謝謝大家的觀看,有什么想法記得評論區(qū)告訴我!拜拜~? ? ?
??完整代碼
import requests from lxml import etree # 需要請求的url url = 'https://www.duanmeiwen.com/xinshang/3203373.html' # 偽裝請求頭 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', } # 獲得響應(yīng) response = requests.get(url=url, headers=headers) # 智能解碼 response.encoding = response.apparent_encoding # 提取數(shù)據(jù) tree = etree.HTML(response.text) titles = tree.xpath('/html/body/div[2]/div[2]/div/div[2]/h2/text()') message = tree.xpath('/html/body/div[2]/div[2]/div/div[2]/p/text()') #遍歷保存數(shù)據(jù) for i in range(len(message)): with open('優(yōu)美文藝句子.txt', 'a', encoding='utf-8') as fp: fp.write(message[i]) fp.write('\n') print('文章爬取完成')
以上就是一文學(xué)會利用python解決文章付費(fèi)限制問題的詳細(xì)內(nèi)容,更多關(guān)于Python解決文章付費(fèi)限制的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在tensorflow以及keras安裝目錄查詢操作(windows下)
這篇文章主要介紹了在tensorflow以及keras安裝目錄查詢操作(windows下),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python統(tǒng)計字符串中指定字符出現(xiàn)次數(shù)的方法
這篇文章主要介紹了python統(tǒng)計字符串中指定字符出現(xiàn)次數(shù)的方法,涉及Python中count函數(shù)的使用技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04Python OpenCV 基于圖像邊緣提取的輪廓發(fā)現(xiàn)函數(shù)
這篇文章主要介紹了Python OpenCV 基于圖像邊緣提取的輪廓發(fā)現(xiàn)函數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Python實現(xiàn)可獲取網(wǎng)易頁面所有文本信息的網(wǎng)易網(wǎng)絡(luò)爬蟲功能示例
這篇文章主要介紹了Python實現(xiàn)可獲取網(wǎng)易頁面所有文本信息的網(wǎng)易網(wǎng)絡(luò)爬蟲功能,涉及Python針對網(wǎng)頁的獲取、字符串正則判定等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01python實現(xiàn)txt文件格式轉(zhuǎn)換為arff格式
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)txt文件格式轉(zhuǎn)換為arff格式的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05利用Pycharm + Django搭建一個簡單Python Web項目的步驟
這篇文章主要介紹了利用Pycharm + Django搭建一個簡單Python Web項目的步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10