如何用六步教會(huì)你使用python爬蟲(chóng)爬取數(shù)據(jù)
前言:
用python的爬蟲(chóng)爬取數(shù)據(jù)真的很簡(jiǎn)單,只要掌握這六步就好,也不復(fù)雜。以前還以為爬蟲(chóng)很難,結(jié)果一上手,從初學(xué)到把東西爬下來(lái),一個(gè)小時(shí)都不到就解決了。
python爬出六部曲
第一步:安裝requests庫(kù)和BeautifulSoup庫(kù):
在程序中兩個(gè)庫(kù)的書(shū)寫(xiě)是這樣的:
import requests from bs4 import BeautifulSoup
由于我使用的是pycharm進(jìn)行的python編程。所以我就講講在pycharm上安裝這兩個(gè)庫(kù)的方法。在主頁(yè)面文件選項(xiàng)下,找到設(shè)置。進(jìn)一步找到項(xiàng)目解釋器。之后在所選框中,點(diǎn)擊軟件包上的+號(hào)就可以進(jìn)行查詢插件安裝了。有過(guò)編譯器插件安裝的hxd估計(jì)會(huì)比較好入手。具體情況就如下圖所示。
第二步:獲取爬蟲(chóng)所需的header和cookie:
我寫(xiě)了一個(gè)爬取微博熱搜的爬蟲(chóng)程序,這里就直接以它為例吧。獲取header和cookie是一個(gè)爬蟲(chóng)程序必須的,它直接決定了爬蟲(chóng)程序能不能準(zhǔn)確的找到網(wǎng)頁(yè)位置進(jìn)行爬取。
首先進(jìn)入微博熱搜的頁(yè)面,按下F12,就會(huì)出現(xiàn)網(wǎng)頁(yè)的js語(yǔ)言設(shè)計(jì)部分。如下圖所示。找到網(wǎng)頁(yè)上的Network部分。然后按下ctrl+R刷新頁(yè)面。如果,進(jìn)行就有文件信息,就不用刷新了,當(dāng)然刷新了也沒(méi)啥問(wèn)題。然后,我們?yōu)g覽Name這部分,找到我們想要爬取的文件,鼠標(biāo)右鍵,選擇copy,復(fù)制下網(wǎng)頁(yè)的URL。就如下圖所示。
復(fù)制好URL后,我們就進(jìn)入一個(gè)網(wǎng)頁(yè)Convert curl commands to code。這個(gè)網(wǎng)頁(yè)可以根據(jù)你復(fù)制的URL,自動(dòng)生成header和cookie,如下圖。生成的header和cookie,直接復(fù)制走就行,粘貼到程序中。
#爬蟲(chóng)頭數(shù)據(jù) cookies = { 'SINAGLOBAL': '6797875236621.702.1603159218040', 'SUB': '_2AkMXbqMSf8NxqwJRmfkTzmnhboh1ygvEieKhMlLJJRMxHRl-yT9jqmg8tRB6PO6N_Rc_2FhPeZF2iThYO9DfkLUGpv4V', 'SUBP': '0033WrSXqPxfM72-Ws9jqgMF55529P9D9Wh-nU-QNDs1Fu27p6nmwwiJ', '_s_tentry': 'www.baidu.com', 'UOR': 'www.hfut.edu.cn,widget.weibo.com,www.baidu.com', 'Apache': '7782025452543.054.1635925669528', 'ULV': '1635925669554:15:1:1:7782025452543.054.1635925669528:1627316870256', } headers = { 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.6241 SLBChan/25', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Sec-Fetch-Site': 'cross-site', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'document', 'Accept-Language': 'zh-CN,zh;q=0.9', } params = ( ('cate', 'realtimehot'), )
復(fù)制到程序中就像這樣。這是微博熱搜的請(qǐng)求頭。
第三步:獲取網(wǎng)頁(yè):
我們將header和cookie搞到手后,就可以將它復(fù)制到我們的程序里。之后,使用request請(qǐng)求,就可以獲取到網(wǎng)頁(yè)了。
#獲取網(wǎng)頁(yè) response = requests.get('https://s.weibo.com/top/summary', headers=headers, params=params, cookies=cookies)
第四步:解析網(wǎng)頁(yè):
這個(gè)時(shí)候,我們需要回到網(wǎng)頁(yè)。同樣按下F12,找到網(wǎng)頁(yè)的Elements部分。用左上角的小框帶箭頭的標(biāo)志,如下圖,點(diǎn)擊網(wǎng)頁(yè)內(nèi)容,這個(gè)時(shí)候網(wǎng)頁(yè)就會(huì)自動(dòng)在右邊顯示出你獲取網(wǎng)頁(yè)部分對(duì)應(yīng)的代碼。
如上圖所示,我們?cè)谡业较胍廊〉捻?yè)面部分的網(wǎng)頁(yè)代碼后,將鼠標(biāo)放置于代碼上,右鍵,copy到selector部分。就如上圖所示。
第五步:分析得到的信息,簡(jiǎn)化地址:
其實(shí)剛才復(fù)制的selector就相當(dāng)于網(wǎng)頁(yè)上對(duì)應(yīng)部分存放的地址。由于我們需要的是網(wǎng)頁(yè)上的一類信息,所以我們需要對(duì)獲取的地址進(jìn)行分析,提取。當(dāng)然,就用那個(gè)地址也不是不行,就是只能獲取到你選擇的網(wǎng)頁(yè)上的那部分內(nèi)容。
#pl_top_realtimehot > table > tbody > tr:nth-child(1) > td.td-02 > a #pl_top_realtimehot > table > tbody > tr:nth-child(2) > td.td-02 > a #pl_top_realtimehot > table > tbody > tr:nth-child(9) > td.td-02 > a
這是我獲取的三條地址,可以發(fā)現(xiàn)三個(gè)地址有很多相同的地方,唯一不同的地方就是tr部分。由于tr是網(wǎng)頁(yè)標(biāo)簽,后面的部分就是其補(bǔ)充的部分,也就是子類選擇器??梢酝茢喑觯擃愋畔?,就是存儲(chǔ)在tr的子類中,我們直接對(duì)tr進(jìn)行信息提取,就可以獲取到該部分對(duì)應(yīng)的所有信息。所以提煉后的地址為:
#pl_top_realtimehot > table > tbody > tr > td.td-02 > a
這個(gè)過(guò)程對(duì)js類語(yǔ)言有一定了解的hxd估計(jì)會(huì)更好處理。不過(guò)沒(méi)有js類語(yǔ)言基礎(chǔ)也沒(méi)關(guān)系,主要步驟就是,保留相同的部分就行,慢慢的試,總會(huì)對(duì)的。
第六步:爬取內(nèi)容,清洗數(shù)據(jù)
這一步完成后,我們就可以直接爬取數(shù)據(jù)了。用一個(gè)標(biāo)簽存儲(chǔ)上面提煉出的像地址一樣的東西。標(biāo)簽就會(huì)拉取到我們想獲得的網(wǎng)頁(yè)內(nèi)容。
#爬取內(nèi)容 content="#pl_top_realtimehot > table > tbody > tr > td.td-02 > a"
之后我們就要soup和text過(guò)濾掉不必要的信息,比如js類語(yǔ)言,排除這類語(yǔ)言對(duì)于信息受眾閱讀的干擾。這樣我們就成功的將信息,爬取下來(lái)了。
fo = open("./微博熱搜.txt",'a',encoding="utf-8") a=soup.select(content) for i in range(0,len(a)): a[i] = a[i].text fo.write(a[i]+'\n') fo.close()
我是將數(shù)據(jù)存儲(chǔ)到了文件夾中,所以會(huì)有wirte帶來(lái)的寫(xiě)的操作。想把數(shù)據(jù)保存在哪里,或者想怎么用,就看讀者自己了。
爬取微博熱搜的代碼實(shí)例以及結(jié)果展示:
import os import requests from bs4 import BeautifulSoup #爬蟲(chóng)頭數(shù)據(jù) cookies = { 'SINAGLOBAL': '6797875236621.702.1603159218040', 'SUB': '_2AkMXbqMSf8NxqwJRmfkTzmnhboh1ygvEieKhMlLJJRMxHRl-yT9jqmg8tRB6PO6N_Rc_2FhPeZF2iThYO9DfkLUGpv4V', 'SUBP': '0033WrSXqPxfM72-Ws9jqgMF55529P9D9Wh-nU-QNDs1Fu27p6nmwwiJ', '_s_tentry': 'www.baidu.com', 'UOR': 'www.hfut.edu.cn,widget.weibo.com,www.baidu.com', 'Apache': '7782025452543.054.1635925669528', 'ULV': '1635925669554:15:1:1:7782025452543.054.1635925669528:1627316870256', } headers = { 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.6241 SLBChan/25', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Sec-Fetch-Site': 'cross-site', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'document', 'Accept-Language': 'zh-CN,zh;q=0.9', } params = ( ('cate', 'realtimehot'), ) #數(shù)據(jù)存儲(chǔ) fo = open("./微博熱搜.txt",'a',encoding="utf-8") #獲取網(wǎng)頁(yè) response = requests.get('https://s.weibo.com/top/summary', headers=headers, params=params, cookies=cookies) #解析網(wǎng)頁(yè) response.encoding='utf-8' soup = BeautifulSoup(response.text, 'html.parser') #爬取內(nèi)容 content="#pl_top_realtimehot > table > tbody > tr > td.td-02 > a" #清洗數(shù)據(jù) a=soup.select(content) for i in range(0,len(a)): a[i] = a[i].text fo.write(a[i]+'\n') fo.close()
總結(jié)
到此這篇關(guān)于如何用六步教會(huì)你使用python爬蟲(chóng)爬取數(shù)據(jù)的文章就介紹到這了,更多相關(guān)python爬蟲(chóng)爬取數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 零基礎(chǔ)寫(xiě)python爬蟲(chóng)之爬蟲(chóng)編寫(xiě)全記錄
- Python爬蟲(chóng)模擬登錄帶驗(yàn)證碼網(wǎng)站
- Python爬蟲(chóng)框架Scrapy安裝使用步驟
- 三個(gè)python爬蟲(chóng)項(xiàng)目實(shí)例代碼
- 33個(gè)Python爬蟲(chóng)項(xiàng)目實(shí)戰(zhàn)(推薦)
- 零基礎(chǔ)寫(xiě)python爬蟲(chóng)之使用Scrapy框架編寫(xiě)爬蟲(chóng)
- 零基礎(chǔ)寫(xiě)python爬蟲(chóng)之使用urllib2組件抓取網(wǎng)頁(yè)內(nèi)容
- python抓取網(wǎng)頁(yè)圖片示例(python爬蟲(chóng))
- 10個(gè)python爬蟲(chóng)入門基礎(chǔ)代碼實(shí)例 + 1個(gè)簡(jiǎn)單的python爬蟲(chóng)完整實(shí)例
- 輕松掌握Python爬蟲(chóng),從入門到精通
相關(guān)文章
python使用循環(huán)打印所有三位數(shù)水仙花數(shù)的實(shí)例
今天小編就為大家分享一篇python使用循環(huán)打印所有三位數(shù)水仙花數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11Python 數(shù)據(jù)的累加與統(tǒng)計(jì)的示例代碼
這篇文章主要介紹了Python 數(shù)據(jù)的累加與統(tǒng)計(jì)的示例代碼,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08Python使用read_csv讀數(shù)據(jù)遇到分隔符問(wèn)題的2種解決方式
read.csv()可以從帶分隔符的文本文件中導(dǎo)入數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Python使用read_csv讀數(shù)據(jù)遇到分隔符問(wèn)題的2種解決方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07Jupyter Notebook 文件默認(rèn)目錄的查看以及更改步驟
這篇文章主要介紹了Jupyter Notebook 文件默認(rèn)目錄的查看以及更改步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04django修改models重建數(shù)據(jù)庫(kù)的操作
這篇文章主要介紹了django修改models重建數(shù)據(jù)庫(kù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03老生常談Python startswith()函數(shù)與endswith函數(shù)
下面小編就為大家?guī)?lái)一篇老生常談Python startswith()函數(shù)與endswith函數(shù)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09學(xué)習(xí)python之編寫(xiě)簡(jiǎn)單簡(jiǎn)單連接數(shù)據(jù)庫(kù)并執(zhí)行查詢操作
這篇文章主要介紹了學(xué)習(xí)python之編寫(xiě)簡(jiǎn)單簡(jiǎn)單連接數(shù)據(jù)庫(kù)并執(zhí)行查詢操作,需要的朋友可以參考下2016-02-02淺談Python實(shí)現(xiàn)Apriori算法介紹
這篇文章主要介紹了淺談Python實(shí)現(xiàn)Apriori算法介紹,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12