教程:Python大佬精選教材,一步一步教你從零開(kāi)始學(xué)會(huì )采集小說(shuō)
優(yōu)采云 發(fā)布時(shí)間: 2022-11-17 01:55教程:Python大佬精選教材,一步一步教你從零開(kāi)始學(xué)會(huì )采集小說(shuō)
爬蟲(chóng)實(shí)戰01--小說(shuō)02-2,起始頁(yè)處理02-3,頁(yè)面處理03,其他內容分析:03-3,其他04,完整代碼05,結論:
01.運行環(huán)境
私信小編01 領(lǐng)取Python學(xué)習資料
# 操作系統:win10 專(zhuān)業(yè)版
pycharm professional 2019.1
python 3.8
beautifulsoup4 == 4.9.0
requests == 2.23.0
random # 內置的
1234567
02.啟動(dòng)爬蟲(chóng)02-1。分析要點(diǎn)
另外兩點(diǎn),先獲取頁(yè)面,再獲取頁(yè)面中的內容
02-1-1。頁(yè)面間處理:找到爬蟲(chóng)的第一頁(yè),查找上一頁(yè)和下一頁(yè)的規則是什么,或者如何從跳到下一頁(yè)找到最后一頁(yè)
總的來(lái)說(shuō)就是:判斷開(kāi)始條件和結束條件,找到跳轉到下一頁(yè)的規則?。◤念^到尾都有一個(gè)過(guò)程)02-1-2。提取頁(yè)面中的內容 找到數據內容所在的位置,(title, content...)(重點(diǎn)找到內容的共性,方便提?。┨崛∷谖恢玫膌abel,然后提取text和保存提取的Data 02-2,起始頁(yè)處理02-2-1,文章目錄鏈接地址:
http://www.quanben5.com/n/chuimianbuhanyangliufeng/xiaoshuo.html
12
這個(gè)地址就是我們要爬取的小說(shuō)的目錄頁(yè)地址。這個(gè)頁(yè)面有我們要爬取的所有頁(yè)面的鏈接地址,方便我們知道第一頁(yè)和最后一頁(yè),以及頁(yè)面之間的地址規則。.
02-2-2。第一頁(yè)鏈接地址:
# 第一個(gè)頁(yè)面鏈接地址
http://www.quanben5.com/n/chuimianbuhanyangliufeng/17482.html
12
02-2-3,第2-5頁(yè)鏈接地址:
# 第二個(gè)頁(yè)面鏈接地址:
http://www.quanben5.com/n/chuimianbuhanyangliufeng/17483.html
# 第三個(gè)頁(yè)面鏈接地址:
http://www.quanben5.com/n/chuimianbuhanyangliufeng/17484.html
# 第四個(gè)頁(yè)面鏈接地址:
http://www.quanben5.com/n/chuimianbuhanyangliufeng/17485.html
# 第五個(gè)頁(yè)面鏈接地址:
http://www.quanben5.com/n/chuimianbuhanyangliufeng/17486.html
12345678
02-2-4。最后一頁(yè)鏈接地址:
# 最后一個(gè)頁(yè)面鏈接地址:
http://www.quanben5.com/n/chuimianbuhanyangliufeng/17649.html
12
02-2-5。分析結果
從上面的鏈接地址可以看出,這本小說(shuō)的整個(gè)網(wǎng)頁(yè)地址都來(lái)自
到達
完了,我們可以對比一下,是上一個(gè)
*****.html都是一樣的,只有最后五個(gè)值不一樣,而且頁(yè)面之間有+1的變化規則,所以這樣我們就知道了所有頁(yè)面的規則和開(kāi)始,結束條件。
02-2-6。獲取所有頁(yè)面的代碼
urllist = ['http://www.quanben5.com/n/chuimianbuhanyangliufeng/{}.html'.format(page) for page in range(17644,17650)]
此列表理解將所有頁(yè)面保存在 urllist 列表中。
02-3. 頁(yè)內處理 02-3-1。頁(yè)面分析1
打開(kāi)一篇文章文章,右鍵查看!
知道文章的內容所在的標簽,點(diǎn)擊代碼左上角的小箭頭,然后在網(wǎng)頁(yè)中選擇你要看的內容所在的區域,然后分析找到它之后
02-3-2,文章頭條分析:
經(jīng)過(guò)分析,title是頁(yè)面中唯一的標簽,class='title'我們通過(guò)title的這兩個(gè)特征得到title,進(jìn)而得到title的內容。(獲取標題是內容需要的,也可以作為保存文件的文件名)
02-3-3。獲取標題代碼實(shí)現:
response = requests.get(url=pageurl,headers=headers,params=params)
<p>
reshtml = response.content.decode()
soup = BeautifulSoup(reshtml,'lxml')
# 獲取頁(yè)面的標題所在標簽,用到了***層級選擇器****
titlelist = soup.select('.content h1')
# 獲取標簽里面的標題內容,因為標簽是保存的一個(gè)列表里面,要先取出來(lái),
# 然后用`.get_text()`獲取到其中的內容
title_text = titlelist[0].get_text()
# 替換到標題里面的一些特殊符號,后面保存為文件名的時(shí)候,不允許,
# 這一個(gè)是后面代碼運行之中出的錯誤,后面加上的。
title_text =title_text.replace('*','')</p>
02-3-4。獲取內容分析:
通過(guò)分析,(見(jiàn)圖),發(fā)現以下幾點(diǎn):
1.小說(shuō)的所有內容都在p標簽里
2. 這個(gè)內容的p標簽在id=''content'的div標簽里面。
基于以上兩點(diǎn),我們可以唯一獲取到所有內容的p標簽,進(jìn)而獲取到里面的內容。
02-3-5。內容獲取代碼說(shuō)明
response = requests.get(url=pageurl,headers=headers,params=params)
reshtml = response.content.decode()
soup = BeautifulSoup(reshtml,'lxml')
# 獲取到全部存在內容的標簽,返回的是一個(gè)列表
# 用到了***層級選擇器***
restextlist = soup.select('#content p')
# 用for循環(huán)可以取出全部的標簽,然后用.get_text()取出全部?jì)热荨?/p>
for article_text in restextlist:
article_text.get_text()
03.其他內容分析:03-1。標頭請求標頭
在網(wǎng)頁(yè)里面,
右支票
-----> 點(diǎn)擊上面的網(wǎng)絡(luò )
-----> 檢查保留日志
-----> 然后刷新頁(yè)面
-----> 在Name中找到一條消息刷新(大概率是)(這是網(wǎng)頁(yè),找到就ok),
-----> 點(diǎn)擊右邊的headers頭信息
-----> 翻到最下面Request Headers 請求頭信息
-----> 找到里面的User-Agent信息,然后復制粘貼到代碼中。這里存儲了很多信息。如果不攜帶,大概率會(huì )請求不到網(wǎng)頁(yè)。
03-2. 使用參數代理池的原因:
同一個(gè)ip地址,對一個(gè)網(wǎng)站快速頻繁的請求,會(huì )被網(wǎng)站認為是惡意請求,爬蟲(chóng)等異常情況,然后會(huì )被ip bans等限制。讓你無(wú)法爬取信息。
解決方案
使用代理池,(這個(gè)是正向代理,反向代理可以用Nginx自己了解,前者是給瀏覽器代理,后者是給服務(wù)器代理。)然后從中隨機選擇一個(gè)ip代理池去Access,每次請求ip都不一樣,這樣的話(huà),對方是檢測不到異常的。
快速代理
這個(gè)網(wǎng)站收錄大量免費的高密代理可以使用,對方無(wú)法檢測和追蹤ip!
03-3。其他
如果以上還是請求不到頁(yè)面,那你繼續盡可能的攜帶Resquest Headers請求頭中的信息。讓對方以為你是瀏覽器。
04.完整代碼
import requests
from bs4 import BeautifulSoup
import random
# 全部網(wǎng)頁(yè)列表,后面進(jìn)行循環(huán)取出頁(yè)面,然后處理
urllist = ['http://www.quanben5.com/n/chuimianbuhanyangliufeng/{}.html'.format(page) for page in range(17482,17650)]
# 請求頭
headers = {
<p>
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"
}
# 正向代理,代理池。
# 如果一個(gè)ip地址,快速,一直請求的話(huà),會(huì )被網(wǎng)頁(yè)認為是爬蟲(chóng),然后把你的ip地址封禁了。。所以用正向代理。。然后在下面用random模塊,隨機取出一個(gè)ip地址進(jìn)行請求!
paramslist = ['121.232.199.237:9000','125.108.67.254:9000','123.163.118.102:9999',
'125.108.67.254:9000','171.35.172.151:9999','123.101.231.234:9999',
'125.108.67.254:9000','123.163.118.102:9999','171.35.172.151:9999',
'123.101.231.234:9999','113.195.16.16:9999','175.44.109.145:9999',
'125.108.85.141:9000','175.43.32.21:9999','183.166.103.22:9999',
'125.110.96.80:9000','123.160.69.100:9999','112.111.217.69:9999',
'1.199.30.133:9999','123.55.102.150:9999','120.83.104.196:9999',
'180.118.128.138:9000','163.204.95.253:9999','113.195.18.89:9999',
'113.195.16.191:9999','175.42.129.76:9999','125.110.124.214:9000',
'125.110.102.54:9000','36.249.119.16:9999','125.110.89.240:9000',
'171.35.146.70:9999','124.93.201.59:42672','171.35.173.112:9999']
# 從代理池里面,隨機取出一個(gè)ip地址,進(jìn)行訪(fǎng)問(wèn)
httpindex = random.randint(0,len(paramslist)-1)
params = {
'HTTP': paramslist[httpindex]
}
# for循環(huán)每一個(gè)列表,進(jìn)行處理
for pageurl in urllist:
# 下面的兩行就是看一個(gè)下載進(jìn)度提示,沒(méi)有意義
index1 = urllist.index(pageurl)+1
print("第{}下載".format(index1))
# 發(fā)送請求,獲取頁(yè)面
response = requests.get(url=pageurl,headers=headers,params=params)
reshtml = response.content.decode()
# 用bs4解析頁(yè)面
soup = BeautifulSoup(reshtml,'lxml')
# 獲取小說(shuō)全部?jì)热莸臉撕?/p>
restextlist = soup.select('#content p')
# 獲取小說(shuō)標題的標簽
titlelist = soup.select('.content h1')
# 獲取標題的文字,然后進(jìn)行特殊符號的替換,以免很后面文章命名文件出錯
title_text = titlelist[0].get_text()
title_text =title_text.replace('*','')
print("正在下載---{}---".format(title_text))
# 打開(kāi)文件,進(jìn)行寫(xiě)入文章的全部的小說(shuō),文件命名就是“標題.txt”,寫(xiě)的方式'w',編碼方式是'utf-8'
with open("./08novel/{}.txt".format(title_text),'w',encoding='utf-8') as f:
f.write(title_text+"\n")
# for循環(huán)獲取的article_text 是帶有內容的p標簽
for article_text in restextlist:
# article_text.get_text()這一個(gè)才是p標簽,獲取其中的內容。換行
f.write(article_text.get_text()+"\n")
print("下載完成---{}---".format(title_text))
print("全部下載完成!")
</p>
05.結論:
個(gè)人記錄,初學(xué)者入門(mén),學(xué)到很多,歡迎交流討論!
技巧:免費關(guān)鍵詞挖掘工具有哪些,五款必備工具推薦
眾所周知,網(wǎng)站關(guān)鍵詞分為目標關(guān)鍵詞和長(cháng)尾關(guān)鍵詞。目標關(guān)鍵詞作為網(wǎng)站的靈魂,定義了網(wǎng)站的中心思想和內容建設與拓展的方向。選擇正確的目標關(guān)鍵詞就像選擇成功之路長(cháng)尾關(guān)鍵詞指的是網(wǎng)站非目標關(guān)鍵詞但也能帶來(lái)搜索流量關(guān)鍵詞 , 優(yōu)化長(cháng)尾關(guān)鍵詞 能夠給一個(gè)網(wǎng)站帶來(lái)巨大的流量,挖掘出有用戶(hù)需求的長(cháng)尾關(guān)鍵詞,就像在成功的路上擁有一輛車(chē)!
如何快速有效地挖掘出長(cháng)尾關(guān)鍵詞一直困擾著(zhù)很多SEO初學(xué)者。今天追夢(mèng)人就來(lái)告訴大家如何快速有效挖掘長(cháng)尾關(guān)鍵詞,提高工作效率!
下面介紹幾種方便快捷有效的長(cháng)尾關(guān)鍵詞挖礦方法:
1.利用“百度指數”尋找用戶(hù)需求
打開(kāi)百度索引頁(yè)(),輸入目標關(guān)鍵詞,點(diǎn)擊查看索引,然后選擇需求圖。
滑動(dòng)到頁(yè)面底部以查看熱門(mén)搜索。
根據百度指數展示的需求圖以及相關(guān)搜索詞和熱門(mén)搜索中上升最快的搜索詞,我們可以列出一些比較流行的長(cháng)尾關(guān)鍵詞。
2.百度推廣客戶(hù)端-關(guān)鍵詞工具
百度推廣客戶(hù)端()作為百度搜索推廣、網(wǎng)盟推廣的利器,不僅給眾多SEMer帶來(lái)了極大的便利,關(guān)鍵詞工具也適合SEOer工作中的長(cháng)尾關(guān)鍵詞挖掘. 我們只需要注冊(注冊地址)并登錄百度推廣賬號就可以使用這個(gè)工具(免費)。
點(diǎn)擊關(guān)鍵詞工具,等待彈出對話(huà)框,輸入搜索關(guān)鍵詞,關(guān)鍵詞工具會(huì )列出相關(guān)的長(cháng)尾關(guān)鍵詞,并顯示關(guān)鍵詞 date 搜索量一般,競爭激烈等!
3.利用“詞庫網(wǎng)絡(luò )”挖掘長(cháng)尾關(guān)鍵詞
()是一個(gè)綜合性的網(wǎng)站關(guān)鍵詞詞庫,包括最新關(guān)鍵詞庫、熱門(mén)關(guān)鍵詞庫、競價(jià)關(guān)鍵詞庫、行業(yè)關(guān)鍵詞 圖書(shū)館等
選擇長(cháng)尾詞庫,輸入關(guān)鍵詞搜索,會(huì )為我們列出與目標關(guān)鍵詞相關(guān)的長(cháng)尾關(guān)鍵詞。并且會(huì )顯示與目標關(guān)鍵詞相關(guān)的長(cháng)尾關(guān)鍵詞的數量、索引、搜索趨勢、搜索結果、排名第一網(wǎng)站等。
4.使用“愛(ài)站工具包”-關(guān)鍵詞查詢(xún)
愛(ài)站Toolkit()是SEOer必備的聚合工具包,匯集了日常SEO工作所需的眾多工具,只需注冊登錄即可使用(免費)。
選擇關(guān)鍵詞挖掘,可以快速有效地挖掘與目標關(guān)鍵詞相關(guān)的長(cháng)尾關(guān)鍵詞。支持百度索引批量查詢(xún)和關(guān)鍵詞挖掘功能,可快速批量查詢(xún)導出指定級別索引關(guān)鍵詞。關(guān)鍵詞挖礦可以挖掘出自愛(ài)站打開(kāi)站點(diǎn)以來(lái)的所有數據,并支持關(guān)聯(lián)、過(guò)濾等篩選、導出等功能。
寫(xiě)在最后
還有一些類(lèi)似的工具,比如:站長(cháng)助手、追詞助手、金花關(guān)鍵詞工具等,這里就不一一舉例了,只要掌握了以上的工具和方法,你絕對可以滿(mǎn)足SEOer的長(cháng)尾關(guān)鍵詞挖掘。






