一文教會(huì)你用Python獲取網(wǎng)頁(yè)指定內(nèi)容
前言
Python用做數(shù)據(jù)處理還是相當(dāng)不錯(cuò)的,如果你想要做爬蟲(chóng),Python是很好的選擇,它有很多已經(jīng)寫(xiě)好的類(lèi)包,只要調(diào)用,即可完成很多復(fù)雜的功能
在我們開(kāi)始之前,我們需要安裝一些環(huán)境依賴(lài)包,打開(kāi)命令行
確保電腦中具有python和pip,如果沒(méi)有的話則需要自行進(jìn)行安裝
之后我們可使用pip安裝必備模塊 requests
pip install requests
requests是python實(shí)現(xiàn)的簡(jiǎn)單易用的HTTP庫(kù),使用起來(lái)比urllib簡(jiǎn)潔很多,requests 允許你發(fā)送 HTTP/1.1 請(qǐng)求。指定 URL并添加查詢(xún)url字符串即可開(kāi)始爬取網(wǎng)頁(yè)信息
1.抓取網(wǎng)頁(yè)源代碼
以該平臺(tái)為例,抓取網(wǎng)頁(yè)中的公司名稱(chēng)數(shù)據(jù),網(wǎng)頁(yè)鏈接:https://www.crrcgo.cc/admin/crr_supplier.html?page=1
目標(biāo)網(wǎng)頁(yè)源代碼如下:
首先明確步驟
1.打開(kāi)目標(biāo)站點(diǎn)
2.抓取目標(biāo)站點(diǎn)代碼并輸出
import requests
導(dǎo)入我們需要的requests功能模塊
page=requests.get('https://www.crrcgo.cc/admin/crr_supplier.html?page=1')
這句命令的意思就是使用get方式獲取該網(wǎng)頁(yè)的數(shù)據(jù)。實(shí)際上我們獲取到的就是瀏覽器打開(kāi)百度網(wǎng)址時(shí)候首頁(yè)畫(huà)面的數(shù)據(jù)信息
print(page.text)
這句是把我們獲取數(shù)據(jù)的文字(text)內(nèi)容輸出(print)出來(lái)
import requestspage=requests.get('https://www.crrcgo.cc/admin/crr_supplier.html?page=1')print(page.text)
成功爬取到了目標(biāo)網(wǎng)頁(yè)源代碼
2.抓取一個(gè)網(wǎng)頁(yè)源代碼中的某標(biāo)簽內(nèi)容
但是上面抓取到的代碼充滿尖括號(hào)的一片字符,對(duì)我們沒(méi)有什么作用,這樣的充滿尖括號(hào)的數(shù)據(jù)就是我們從服務(wù)器收到的網(wǎng)頁(yè)文件,就像Office的doc、pptx文件格式一樣,網(wǎng)頁(yè)文件一般是html格式。我們的瀏覽器可以把這些html代碼數(shù)據(jù)展示成我們看到的網(wǎng)頁(yè)。
我們?nèi)绻枰@些字符里面提取有價(jià)值的數(shù)據(jù),就必須先了解標(biāo)記元素
每個(gè)標(biāo)記的文字內(nèi)容都是夾在兩個(gè)尖括號(hào)中間的,結(jié)尾尖括號(hào)用/開(kāi)頭,尖括號(hào)內(nèi)(img和div)表示標(biāo)記元素的類(lèi)型(圖片或文字),尖括號(hào)內(nèi)可以有其他的屬性(比如src)
標(biāo)記內(nèi)容文字才是我們需要的數(shù)據(jù),但我們要利用id或class屬性才能從眾多標(biāo)記中找到需要的標(biāo)記元素。
我們可以在電腦瀏覽器中打開(kāi)任意網(wǎng)頁(yè),按下f12鍵即可打開(kāi)元素查看器(Elements),就可以看到組成這個(gè)頁(yè)面的成百上千個(gè)各種各樣的標(biāo)記元素
標(biāo)記元素是可以一層一層嵌套的,比如下面就是body嵌套了div元素,body是父層、上層元素;div是子層、下層元素。
<body> <div>十分鐘上手?jǐn)?shù)據(jù)爬蟲(chóng)</div> </body>
回到抓取上面來(lái),現(xiàn)在我只想在網(wǎng)頁(yè)中抓取公司名這個(gè)數(shù)據(jù),其他的我不想要
查看網(wǎng)頁(yè)html代碼,發(fā)現(xiàn)公司名在標(biāo)簽detail_head里面
import requests req=requests.get('https://www.crrcgo.cc/admin/crr_supplier.html?page=1')
這兩行上面解釋過(guò)了,是獲取頁(yè)面數(shù)據(jù)
from bs4 import BeautifulSoup
我們需要使用BeautifulSoup這個(gè)功能模塊來(lái)把充滿尖括號(hào)的html數(shù)據(jù)變?yōu)楦糜玫母袷剑琭rom bs4 import BeautifulSoup這個(gè)是說(shuō)從bs4這個(gè)功能模塊中導(dǎo)入BeautifulSoup,是的,因?yàn)閎s4中包含了多個(gè)模塊,BeautifulSoup只是其中一個(gè)
req.encoding = "utf-8"
指定獲取的網(wǎng)頁(yè)內(nèi)容用utf-8編碼
soup = BeautifulSoup(html.text, 'html.parser')
這句代碼用html解析器(parser)來(lái)分析我們r(jià)equests得到的html文字內(nèi)容,soup就是我們解析出來(lái)的結(jié)果。
company_item=soup.find_all('div',class_="detail_head")
find是查找,find_all查找全部。查找標(biāo)記名是div并且class屬性是detail_head的全部元素
dd = company_item.text.strip()
strip() 方法用于移除字符串頭尾指定的字符(默認(rèn)為空格或換行符)或字符序列。在這里就是移除多余的尖括號(hào)的html數(shù)據(jù)
最后拼接之后代碼如下:
import requests from bs4 import BeautifulSoup req = requests.get(url="https://www.crrcgo.cc/admin/crr_supplier.html?page=1") req.encoding = "utf-8" html=req.text soup = BeautifulSoup(req.text,features="html.parser") company_item = soup.find("div",class_="detail_head") dd = company_item.text.strip() print(dd)
最后執(zhí)行結(jié)果成功的抓取到了網(wǎng)頁(yè)中我們想要的公司信息,但是卻只抓取到了一個(gè)公司,其余的則并未抓取到
所以我們需要加入一個(gè)循環(huán),抓取網(wǎng)頁(yè)中所有公司名,并沒(méi)多大改變
for company_item in company_items: dd = company_item.text.strip() print(dd)
最終代碼如下:
import requests from bs4 import BeautifulSoup req = requests.get(url="https://www.crrcgo.cc/admin/crr_supplier.html?page=1") req.encoding = "utf-8" html=req.text soup = BeautifulSoup(req.text,features="html.parser") company_items = soup.find_all("div",class_="detail_head") for company_item in company_items: dd = company_item.text.strip() print(dd)
最終運(yùn)行結(jié)果查詢(xún)出了該網(wǎng)頁(yè)中所有的公司名
3.抓取多個(gè)網(wǎng)頁(yè)子標(biāo)簽的內(nèi)容
那我現(xiàn)在想要抓取多個(gè)網(wǎng)頁(yè)中的公司名呢?很簡(jiǎn)單,大體代碼都已經(jīng)寫(xiě)出,我們只需要再次加入一個(gè)循環(huán)即可
查看我們需要進(jìn)行抓取的網(wǎng)頁(yè),發(fā)現(xiàn)當(dāng)網(wǎng)頁(yè)變化時(shí),就只有page后面的數(shù)字會(huì)發(fā)生變化。當(dāng)然很多大的廠商的網(wǎng)頁(yè),例如京東、淘寶 它們的網(wǎng)頁(yè)變化時(shí)常讓人摸不著頭腦,很難猜測(cè)。
inurl="https://www.crrcgo.cc/admin/crr_supplier.html?page=" for num in range(1,6): print("================正在爬蟲(chóng)第"+str(num)+"頁(yè)數(shù)據(jù)==================")
寫(xiě)入循環(huán),我們只抓取1到5頁(yè)的內(nèi)容,這里的循環(huán)我們使用range函數(shù)來(lái)實(shí)現(xiàn),range函數(shù)左閉右開(kāi)的特性使得我們要抓取到5頁(yè)必須指定6
outurl=inurl+str(num) req = requests.get(url=outurl)
將循環(huán)值與url拼接成完整的url,并獲取頁(yè)面數(shù)據(jù)
完整代碼如下:
import requests from bs4 import BeautifulSoup inurl="https://www.crrcgo.cc/admin/crr_supplier.html?page=" for num in range(1,6): print("================正在爬蟲(chóng)第"+str(num)+"頁(yè)數(shù)據(jù)==================") outurl=inurl+str(num) req = requests.get(url=outurl) req.encoding = "utf-8" html=req.text soup = BeautifulSoup(req.text,features="html.parser") company_items = soup.find_all("div",class_="detail_head") for company_item in company_items: dd = company_item.text.strip() print(dd)
成功的抓取到了1-5頁(yè)所有的公司名(子標(biāo)簽)內(nèi)容
總結(jié)
到此這篇關(guān)于Python獲取網(wǎng)頁(yè)指定內(nèi)容的文章就介紹到這了,更多相關(guān)Python獲取網(wǎng)頁(yè)指定內(nèi)容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Python實(shí)現(xiàn)全自動(dòng)下載抖音視頻
這篇文章主要介紹了基于Python實(shí)現(xiàn)全自動(dòng)下載抖音視頻,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Django對(duì)接支付寶實(shí)現(xiàn)支付寶充值金幣功能示例
今天小編就為大家分享一篇Django對(duì)接支付寶實(shí)現(xiàn)支付寶充值金幣功能示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12Python GUI Tkinter簡(jiǎn)單實(shí)現(xiàn)個(gè)性簽名設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了Python GUI Tkinter簡(jiǎn)單實(shí)現(xiàn)個(gè)性簽名設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06python??UPX?is?not?available問(wèn)題解決方法
這篇文章主要介紹了python?UPX?is?not?available問(wèn)題解決,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04基于python實(shí)現(xiàn)MQTT發(fā)布訂閱過(guò)程原理解析
這篇文章主要介紹了基于python實(shí)現(xiàn)MQTT發(fā)布訂閱過(guò)程原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07