這篇文章給大家分享的是有關(guān)怎么使用Python爬蟲抓取數(shù)據(jù)的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)公司專注于中大型企業(yè)的成都做網(wǎng)站、成都網(wǎng)站制作和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計客戶上千余家,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運用,我們將一直專注成都品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開發(fā),在前進(jìn)的路上,與客戶一起成長!
工具安裝
首先需要安裝Python的requests和BeautifulSoup庫。我們用Requests庫用抓取網(wǎng)頁的內(nèi)容,使用BeautifulSoup庫來從網(wǎng)頁中提取數(shù)據(jù)。
安裝python
運行pip install requests
運行pip install BeautifulSoup
抓取網(wǎng)頁
完成必要工具安裝后,我們正式開始編寫我們的爬蟲。我們的第一個任務(wù)是要抓取所有豆瓣上的圖書信息。我們以https://book.douban.com/subject/26986954/為例,首先看看開如何抓取網(wǎng)頁的內(nèi)容。
提取內(nèi)容
抓取到網(wǎng)頁的內(nèi)容后,我們要做的就是提取出我們想要的內(nèi)容。在我們的第一個例子中,我們只需要提取書名。首先我們導(dǎo)入BeautifulSoup庫,使用BeautifulSoup我們可以非常簡單的提取網(wǎng)頁的特定內(nèi)容。
連續(xù)抓取網(wǎng)頁
到目前為止,我們已經(jīng)可以抓取單個網(wǎng)頁的內(nèi)容了,現(xiàn)在讓我們看看如何抓取整個網(wǎng)站的內(nèi)容。我們知道網(wǎng)頁之間是通過超鏈接互相連接在一起的,通過鏈接我們可以訪問整個網(wǎng)絡(luò)。所以我們可以從每個頁面提取出包含指向其它網(wǎng)頁的鏈接,然后重復(fù)的對新鏈接進(jìn)行抓取。
準(zhǔn)備
IDE:pyCharm
庫:requests、lxm
大概介紹一下,這倆庫主要為我們做什么服務(wù)的
requests:獲取網(wǎng)頁源代碼
lxml:得到網(wǎng)頁源代碼中的指定數(shù)據(jù)
言簡意賅有沒有 ^_^
搭建環(huán)境
這里的搭建環(huán)境,可不是搭建python的開發(fā)環(huán)境,這里的搭建環(huán)境是指,我們使用pycharm新建一個python項目,然后弄好requests和lxml 新建一個項目,光溜溜的啥也沒有,新建個src文件夾再在里面直接新建一個Test.py吧 。
依賴庫導(dǎo)入
在Test.py中輸入:
import requests
這個時候,requests會報紅線,這時候,我們將光標(biāo)對準(zhǔn)requests,按快捷鍵:alt + enter,pycharm會給出解決之道,這時候,選擇install package requests,pycharm就會自動為我們安裝了,我們只需要稍等片刻,這個庫就安裝好了。lxml的安裝方式同理.
將這兩個庫安裝完畢后,編譯器就不會報紅線了。
取網(wǎng)頁源代碼
requests可以很方便的讓我們得到網(wǎng)頁的源代碼。
獲取源碼:
# 獲取源碼
html = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
# 打印源碼
print html.text
代碼就是這么簡單,這個html.text便是這個URL的源碼
獲取指定數(shù)據(jù)
現(xiàn)在我們已經(jīng)得到網(wǎng)頁源碼了,這時就需要用到lxml來來篩選出我們所需要的信息
首先我們需要分析一下源碼,我這里使用的是chrome瀏覽器,所以右鍵檢查。
然后在源代碼中,定位找到第一篇 。
首先點擊源碼頁右上角的箭頭,然后在網(wǎng)頁內(nèi)容中選中文章標(biāo)題,這個時候,源碼會定位到標(biāo)題這里,
這時候選中源碼的標(biāo)題元素,右鍵復(fù)制。
得到xpath,它相當(dāng)于地址。比如網(wǎng)頁某長圖片在源碼中的位置。
表達(dá)式://*[@id="mainBox"]/main/div[2]/div[1]/h5/a
首先,//表示根節(jié)點,也就是說啊,這//后面的東西為根,則說明只有一個啊。我們需要的東西,在這里面。
然后/表示往下層尋找,根據(jù)圖片,也顯而易見,div -> main -> div[2] -> div[1] -> h5 -> a
追蹤到a這里,然后我們在后面加個/text,表示要把元素的內(nèi)容提取出來,所以我們最終的表達(dá)式長這樣:
//*[@id="mainBox"]/main/div[2]/div[1]/h5/a/text()
這個表達(dá)式只針對這個網(wǎng)頁的這個元素,不難理解吧?
那么這個東西怎么用呢?
所有代碼:
import requests
from lxml import etree
html = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
# print html.text
etree_html = etree.HTML(html.text)
content = etree_html.xpath('//*[@id="mainBox"]/main/div[2]/div[1]/h5/a/text()')
for each in content:
print(each)
這時候,each里面的數(shù)據(jù)就是我們想要得到的數(shù)據(jù)了
打印結(jié)果:
如何擼一個ArrayList
打印結(jié)果卻是這個結(jié)果,我們把換行和空格去掉
import requests
from lxml import etree
html = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
# print html.text
etree_html = etree.HTML(html.text)
content = etree_html.xpath('//*[@id="mainBox"]/main/div[2]/div[1]/h5/a/text()')
for each in content:
replace = each.replace('\n', '').replace(' ', '')
if replace == '\n' or replace == '':
continue
else:
print(replace)
打印結(jié)果:
如何擼一個ArrayList
感謝各位的閱讀!關(guān)于“怎么使用Python爬蟲抓取數(shù)據(jù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!