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