溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么創(chuàng)建基于Python的爬蟲(chóng)

發(fā)布時(shí)間:2021-10-28 16:50:08 來(lái)源:億速云 閱讀:145 作者:iii 欄目:編程語(yǔ)言

這篇文章主要介紹“怎么創(chuàng)建基于Python的爬蟲(chóng)”,在日常操作中,相信很多人在怎么創(chuàng)建基于Python的爬蟲(chóng)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么創(chuàng)建基于Python的爬蟲(chóng)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

什么是網(wǎng)頁(yè)抓???

這是一種從網(wǎng)站提取信息的方法。HTML頁(yè)面不過(guò)是嵌套標(biāo)記的集合。標(biāo)簽形成某種樹(shù),其根在<html>標(biāo)簽中,并將頁(yè)面分成不同的邏輯部分。每個(gè)標(biāo)簽可以有其自己的后代(子級(jí))和父級(jí)。

例如,HTML頁(yè)面樹(shù)可以如下所示:

怎么創(chuàng)建基于Python的爬蟲(chóng)

要處理此HTML,您可以使用文本或樹(shù)。繞過(guò)這棵樹(shù)是網(wǎng)頁(yè)抓取。我們只會(huì)在所有這些多樣性中找到我們需要的節(jié)點(diǎn),并從中獲取信息!這種方法主要集中在將非結(jié)構(gòu)化的HTML數(shù)據(jù)轉(zhuǎn)換成易于使用的結(jié)構(gòu)化信息到數(shù)據(jù)庫(kù)或工作表中。數(shù)據(jù)抓取需要一個(gè)機(jī)器人來(lái)收集信息,并通過(guò)HTTP或Web瀏覽器連接到Internet。在本指南中,我們將使用Python創(chuàng)建刮板。

我們需要做什么:

  •  獲取我們要從中抓取數(shù)據(jù)的頁(yè)面的URL

  •  復(fù)制或下載此頁(yè)面的HTML內(nèi)容

  •  處理此HTML內(nèi)容并獲取所需的數(shù)據(jù)

此序列使我們可以彈出所需的URL,獲取HTML數(shù)據(jù),然后對(duì)其進(jìn)行處理以接收所需的數(shù)據(jù)。但是有時(shí)我們需要先進(jìn)入網(wǎng)站,然后再轉(zhuǎn)到特定的網(wǎng)址以接收數(shù)據(jù)。然后,我們必須再增加一個(gè)步驟-登錄該網(wǎng)站。

配套

我們將使用Beautiful Soup庫(kù)來(lái)分析HTML內(nèi)容并獲取所有必需的數(shù)據(jù)。這是抓取HTML和XML文檔的絕佳Python包。

Selenium庫(kù)將幫助我們?cè)谝粋€(gè)會(huì)話(huà)中使抓取器進(jìn)入網(wǎng)站并轉(zhuǎn)到所需的URL地址。Selenium Python 可以幫助您執(zhí)行諸如單擊按鈕,輸入內(nèi)容等操作。

讓我們深入研究代碼

首先,讓我們導(dǎo)入將要使用的庫(kù)。

# 導(dǎo)入庫(kù)  from selenium import webdriver from bs4 import BeautifulSoup

然后,我們需要向?yàn)g覽器的驅(qū)動(dòng)程序展示Selenium啟動(dòng)網(wǎng)絡(luò)瀏覽器的方式(我們將在這里使用Google Chrome)。如果我們不希望機(jī)器人顯示W(wǎng)eb瀏覽器的圖形界面,則將在Selenium中添加“ headless”選項(xiàng)。

沒(méi)有圖形界面(無(wú)頭)的Web瀏覽器可以在與所有流行的Web瀏覽器非常相似的環(huán)境中自動(dòng)管理網(wǎng)頁(yè)。但是在這種情況下,所有活動(dòng)都通過(guò)命令行界面或使用網(wǎng)絡(luò)通信進(jìn)行。

# chrome驅(qū)動(dòng)程序的路徑  chromedriver = '/usr/local/bin/chromedriver'  options = webdriver.ChromeOptions()  options.add_argument('headless') #open a headless browser   browser = webdriver.Chrome(executable_path=chromedriver,   chrome_options=options)

設(shè)置瀏覽器,安裝庫(kù)并創(chuàng)建環(huán)境之后,我們便開(kāi)始使用HTML。讓我們進(jìn)入輸入頁(yè)面,找到用戶(hù)必須在其中輸入電子郵件地址和密碼的標(biāo)識(shí)符,類(lèi)別或字段名稱(chēng)。

# 進(jìn)入登錄頁(yè)面  browser.get('http://playsports365.com/default.aspx')  # 按姓名搜索標(biāo)簽  email =  browser.find_element_by_name('ctl00$MainContent$ctlLogin$_UserName')  password =   browser.find_element_by_name('ctl00$MainContent$ctlLogin$_Password')  login =   browser.find_element_by_name('ctl00$MainContent$ctlLogin$BtnSubmit')

然后,我們會(huì)將登錄數(shù)據(jù)發(fā)送到這些HTML標(biāo)簽中。為此,我們需要按下操作按鈕以將數(shù)據(jù)發(fā)送到服務(wù)器。

# 添加登錄憑證  email.send_keys('********')  password.send_keys('*******')  # 點(diǎn)擊提交按鈕  login.click()  email.send_keys('********')  password.send_keys('*******')  login.click()

成功進(jìn)入系統(tǒng)后,我們將轉(zhuǎn)到所需的頁(yè)面并收集HTML內(nèi)容。

# 成功登錄后,轉(zhuǎn)到“ OpenBets”頁(yè)面  browser.get('http://playsports365.com/wager/OpenBets.aspx')  # 獲取HTML內(nèi)容  requiredHtml = browser.page_source

現(xiàn)在,當(dāng)我們有了HTML內(nèi)容時(shí),剩下的唯一事情就是處理這些數(shù)據(jù)。我們將在Beautiful Soup和html5lib庫(kù)的幫助下做到這一點(diǎn)。

html5lib是一個(gè)Python軟件包,實(shí)現(xiàn)了受現(xiàn)代Web瀏覽器影響的HTML5抓取算法。一旦獲得了內(nèi)容的標(biāo)準(zhǔn)化結(jié)構(gòu),就可以在HTML標(biāo)記的任何子元素中搜索數(shù)據(jù)。我們正在尋找的信息在表格標(biāo)簽中,因此我們正在尋找它。

soup = BeautifulSoup(requiredHtml, 'html5lib')  table = soup.findChildren('table') my_table = table[0]

我們將找到父標(biāo)記一次,然后遞歸地遍歷子標(biāo)記并打印出值。

# 接收標(biāo)簽和打印值  rows = my_table.findChildren(['th', 'tr'])  for row in rows:   cells = row.findChildren('td')   for cell in cells:   value = cell.text   print (value)

要執(zhí)行此程序,您將需要使用pip安裝Selenium,Beautiful Soup和html5lib。安裝庫(kù)之后,命令如下:

# python <程序名稱(chēng)>

將把這些值打印到控制臺(tái)中,這就是您抓取任何網(wǎng)站的方式。

如果我們抓取經(jīng)常更新內(nèi)容的網(wǎng)站(例如,運(yùn)動(dòng)成績(jī)表),則應(yīng)創(chuàng)建cron任務(wù)以在特定時(shí)間間隔啟動(dòng)該程序。

非常好,一切正常,內(nèi)容被抓取,數(shù)據(jù)被填充,除了這之外,其他一切都很好,這就是我們要獲取數(shù)據(jù)的請(qǐng)求數(shù)。

有時(shí),服務(wù)器會(huì)厭倦同一個(gè)人發(fā)出一堆請(qǐng)求,而服務(wù)器禁止它。不幸的是,人們的耐心有限。

在這種情況下,您必須掩飾自己。禁止的最常見(jiàn)原因是403錯(cuò)誤,以及在IP被阻止時(shí)向服務(wù)器發(fā)送的頻繁請(qǐng)求。服務(wù)器可用并能夠處理請(qǐng)求時(shí),服務(wù)器會(huì)拋出403錯(cuò)誤,但出于某些個(gè)人原因,拒絕這樣做。第一個(gè)問(wèn)題已經(jīng)解決了&ndash;我們可以通過(guò)使用html5lib生成偽造的用戶(hù)代理來(lái)偽裝成人類(lèi),并將操作系統(tǒng),規(guī)范和瀏覽器的隨機(jī)組合傳遞給我們的請(qǐng)求。在大多數(shù)情況下,這樣可以很好地準(zhǔn)確地收集您感興趣的信息。

但是有時(shí)僅將time.sleep()放在正確的位置并填寫(xiě)請(qǐng)求標(biāo)頭是不夠的。因此,您需要尋找功能強(qiáng)大的方法來(lái)更改此IP。要抓取大量數(shù)據(jù),您可以:

&ndash; 開(kāi)發(fā)自己的IP地址基礎(chǔ)架構(gòu);

&ndash; 使用Tor &ndash;該主題可以專(zhuān)門(mén)討論幾篇大型文章,而實(shí)際上已經(jīng)完成了;

&ndash; 使用商業(yè)代理網(wǎng)絡(luò);

對(duì)于網(wǎng)絡(luò)抓取的初學(xué)者來(lái)說(shuō),最好的選擇是與代理提供商聯(lián)系,例如Infatica等,他們可以幫助您設(shè)置代理并解決代理服務(wù)器管理中的所有困難。收集大量數(shù)據(jù)需要大量資源,因此無(wú)需通過(guò)開(kāi)發(fā)自己的內(nèi)部基礎(chǔ)結(jié)構(gòu)來(lái)進(jìn)行代理來(lái)“重新發(fā)明輪子”。甚至許多最大的電子商務(wù)公司都使用代理網(wǎng)絡(luò)服務(wù)將代理管理外包,因?yàn)榇蠖鄶?shù)公司的第一要?jiǎng)?wù)是數(shù)據(jù),而不是代理管理。

到此,關(guān)于“怎么創(chuàng)建基于Python的爬蟲(chóng)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI