Python爬蟲(chóng)代碼怎么寫

這篇“Python爬蟲(chóng)代碼怎么寫”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“Python爬蟲(chóng)代碼怎么寫”文章吧。

目前創(chuàng)新互聯(lián)已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、南漳網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

爬蟲(chóng)是什么

爬蟲(chóng)簡(jiǎn)單的來(lái)說(shuō)就是用程序獲取網(wǎng)絡(luò)上數(shù)據(jù)這個(gè)過(guò)程的一種名稱。

爬蟲(chóng)的原理

如果要獲取網(wǎng)絡(luò)上數(shù)據(jù),我們要給爬蟲(chóng)一個(gè)網(wǎng)址(程序中通常叫URL),爬蟲(chóng)發(fā)送一個(gè)HTTP請(qǐng)求給目標(biāo)網(wǎng)頁(yè)的服務(wù)器,服務(wù)器返回?cái)?shù)據(jù)給客戶端(也就是我們的爬蟲(chóng)),爬蟲(chóng)再進(jìn)行數(shù)據(jù)解析、保存等一系列操作。

流程

爬蟲(chóng)可以節(jié)省我們的時(shí)間,比如我要獲取豆瓣電影 Top250 榜單,如果不用爬蟲(chóng),我們要先在瀏覽器上輸入豆瓣電影的 URL ,客戶端(瀏覽器)通過(guò)解析查到豆瓣電影網(wǎng)頁(yè)的服務(wù)器的 IP 地址,然后與它建立連接,瀏覽器再創(chuàng)造一個(gè) HTTP 請(qǐng)求發(fā)送給豆瓣電影的服務(wù)器,服務(wù)器收到請(qǐng)求之后,把 Top250 榜單從數(shù)據(jù)庫(kù)中提出,封裝成一個(gè) HTTP 響應(yīng),然后將響應(yīng)結(jié)果返回給瀏覽器,瀏覽器顯示響應(yīng)內(nèi)容,我們看到數(shù)據(jù)。我們的爬蟲(chóng)也是根據(jù)這個(gè)流程,只不過(guò)改成了代碼形式。

Python爬蟲(chóng)代碼怎么寫

HTTP請(qǐng)求

HTTP 請(qǐng)求由請(qǐng)求行、請(qǐng)求頭、空行、請(qǐng)求體組成。

Python爬蟲(chóng)代碼怎么寫

請(qǐng)求行由三部分組成:

1.請(qǐng)求方法,常見(jiàn)的請(qǐng)求方法有 GET、POST、PUT、DELETE、HEAD
        2.客戶端要獲取的資源路徑
        3.是客戶端使用的 HTTP 協(xié)議版本號(hào)
請(qǐng)求頭是客戶端向服務(wù)器發(fā)送請(qǐng)求的補(bǔ)充說(shuō)明,比如說(shuō)明訪問(wèn)者身份,這個(gè)下面會(huì)講到。

請(qǐng)求體是客戶端向服務(wù)器提交的數(shù)據(jù),比如用戶登錄時(shí)需要提高的賬號(hào)密碼信息。請(qǐng)求頭與請(qǐng)求體之間用空行隔開(kāi)。請(qǐng)求體并不是所有的請(qǐng)求都有的,比如一般的GET都不會(huì)帶有請(qǐng)求體。

上圖就是瀏覽器登錄豆瓣時(shí)向服務(wù)器發(fā)送的HTTP POST 請(qǐng)求,請(qǐng)求體中指定了用戶名和密碼。

HTTP 響應(yīng)

HTTP 響應(yīng)格式與請(qǐng)求的格式很相似,也是由響應(yīng)行、響應(yīng)頭、空行、響應(yīng)體組成。

Python爬蟲(chóng)代碼怎么寫

響應(yīng)行也包含三部分,分別是服務(wù)端的 HTTP 版本號(hào)、響應(yīng)狀態(tài)碼和狀態(tài)說(shuō)明。

這里狀態(tài)碼有一張表,對(duì)應(yīng)了各個(gè)狀態(tài)碼的意思

Python爬蟲(chóng)代碼怎么寫

Python爬蟲(chóng)代碼怎么寫 Python爬蟲(chóng)代碼怎么寫

第二部分就是響應(yīng)頭,響應(yīng)頭與請(qǐng)求頭對(duì)應(yīng),是服務(wù)器對(duì)該響應(yīng)的一些附加說(shuō)明,比如響應(yīng)內(nèi)容的格式是什么,響應(yīng)內(nèi)容的長(zhǎng)度有多少、什么時(shí)間返回給客戶端的、甚至還有一些 Cookie 信息也會(huì)放在響應(yīng)頭里面。

第三部分是響應(yīng)體,它才是真正的響應(yīng)數(shù)據(jù),這些數(shù)據(jù)其實(shí)就是網(wǎng)頁(yè)的 HTML 源代碼。

爬蟲(chóng)代碼怎么寫

爬蟲(chóng)可以用很多語(yǔ)言比如 Python、C++等等,但是我覺(jué)得Python是最簡(jiǎn)單的,

因?yàn)镻ython有現(xiàn)成可用的庫(kù),已經(jīng)封裝到幾乎完美,

C++雖然也有現(xiàn)成的庫(kù),但是它的爬蟲(chóng)還是比較小眾,僅有的庫(kù)也不足以算上簡(jiǎn)單,而且代碼在各個(gè)編譯器上,甚至同一個(gè)編譯器上不同版本的兼容性不強(qiáng),所以不是特別好用。所以今天主要介紹python爬蟲(chóng)。

安裝requests庫(kù)

cmd運(yùn)行:pip install requests ,安裝 requests。

然后在 IDLE 或者編譯器(個(gè)人推薦 VS Code 或者 Pycharm )上輸入

import requests 運(yùn)行,如果沒(méi)有報(bào)錯(cuò),證明安裝成功。

安裝大部分庫(kù)的方法都是:pip install xxx(庫(kù)的名字)

requests的方法

requests.request()構(gòu)造一個(gè)請(qǐng)求,支撐一下各方法的基本方法
requests.get()獲取HTML網(wǎng)頁(yè)的主要方法,對(duì)應(yīng)于HTTP的GET

requests.head()

獲取HTML網(wǎng)頁(yè)頭信息的方法,對(duì)應(yīng)于HTTP的HEAD

requests.post()向HTML網(wǎng)頁(yè)提交POST請(qǐng)求的方法,對(duì)應(yīng)于HTTP的POST
requests.put()向HTML網(wǎng)頁(yè)提交PUT請(qǐng)求的方法,對(duì)應(yīng)于HTTP的PUT
requests.patch( )向HTML網(wǎng)頁(yè)提交局部修改請(qǐng)求,對(duì)應(yīng)于HTTP的PATCT
requests.delete()向HTML網(wǎng)頁(yè)提交刪除請(qǐng)求,對(duì)應(yīng)于HTTP的DELETE

最常用的get方法

r = requests.get(url)

包括兩個(gè)重要的對(duì)象:

構(gòu)造一個(gè)向服務(wù)器請(qǐng)求資源的Request對(duì)象;返回一個(gè)包含服務(wù)器資源的Response對(duì)象

r.status_codeHTTP請(qǐng)求的返回狀態(tài),200表示連接成功,404表示失敗
r.textHTTP響應(yīng)內(nèi)容的字符串形式,即,url對(duì)應(yīng)的頁(yè)面內(nèi)容
r.encoding從HTTP header中猜測(cè)的響應(yīng)內(nèi)容編碼方式(如果header中不存在charset,則認(rèn)為編碼為ISO-8859-1)
r.apparent_encoding從內(nèi)容中分析的響應(yīng)內(nèi)容編碼方式(備選編碼方式)
r.contentHTTP響應(yīng)內(nèi)容的二進(jìn)制形式
requests.ConnectionError網(wǎng)絡(luò)連接錯(cuò)誤異常,如DNS查詢失敗、拒絕連接等
requests.HTTPErrorHTTP錯(cuò)誤異常
requests.URLRequiredURL缺失異常
requests.TooManyRedirects超過(guò)最大重定向次數(shù),產(chǎn)生重定向異常
requests.ConnectTimeout連接遠(yuǎn)程服務(wù)器超時(shí)異常
requests.Timeout請(qǐng)求URL超時(shí),產(chǎn)生超時(shí)異常

爬蟲(chóng)小demo

requests是最基礎(chǔ)的爬蟲(chóng)庫(kù),但是我們可以做一個(gè)簡(jiǎn)單的翻譯

我先把我做的一個(gè)爬蟲(chóng)的小項(xiàng)目的項(xiàng)目結(jié)構(gòu)放上,完整源碼可以私聊我下載。

Python爬蟲(chóng)代碼怎么寫

下面是翻譯部分的源碼

import requests
def English_Chinese():
url = "https://fanyi.baidu.com/sug"
s = input("請(qǐng)輸入要翻譯的詞(中/英):")
dat = {
"kw":s
}
resp = requests.post(url,data = dat)# 發(fā)送post請(qǐng)求
ch = resp.json() # 將服務(wù)器返回的內(nèi)容直接處理成json => dict
resp.close()
dic_lenth = len(ch['data'])
for i in range(dic_lenth):
print("詞:"+ch['data'][i]['k']+" "+"單詞意思:"+ch['data'][i]['v'])

代碼詳解:

導(dǎo)入requests模塊,設(shè)置 url為百度翻譯網(wǎng)頁(yè)的網(wǎng)址。

Python爬蟲(chóng)代碼怎么寫

然后通過(guò) post 方法發(fā)送請(qǐng)求,再把返回的結(jié)果打成一個(gè) dic (字典),但是這個(gè)時(shí)候我們打印出來(lái)結(jié)果發(fā)現(xiàn)是這樣的。

Python爬蟲(chóng)代碼怎么寫

這是一個(gè)字典里套列表套字典的樣子,大概就是這樣的

{ xx:xx , xx:[ {xx:xx} , {xx:xx} , {xx:xx} , {xx:xx} ] }

我標(biāo)紅的地方是我們需要的信息。

假如說(shuō)我標(biāo)藍(lán)色的列表里面有 n 個(gè)字典,我們可以通過(guò) len() 函數(shù)獲取 n 的數(shù)值,

并使用 for 循環(huán)遍歷,得到結(jié)果。

dic_lenth = len(ch['data']
for i in range(dic_lenth):
   print("詞:"+ch['data'][i]['k']+" "+"單詞意思:"+ch['data'][i]['v'])

最后

爬取天氣的代碼

# -*- coding:utf-8 -*-
import requests
import bs4


def get_web(url):
   header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59"}
   res = requests.get(url, headers=header, timeout=5)
   # print(res.encoding)
   content = res.text.encode('ISO-8859-1')
   return content


def parse_content(content):
   soup = bs4.BeautifulSoup(content, 'lxml')

   '''
   存放天氣情況
   '''
   list_weather = []
   weather_list = soup.find_all('p', class_='wea')
   for i in weather_list:
       list_weather.append(i.text)

   '''
   存放日期
   '''
   list_day = []
   i = 0
   day_list = soup.find_all('h2')
   for each in day_list:
       if i <= 6:
           list_day.append(each.text.strip())
           i += 1
   # print(list_day)

   '''
   存放溫度:最高溫度和最低溫度
   '''
   tem_list = soup.find_all('p', class_='tem')
   i = 0
   list_tem = []
   for each in tem_list:
       if i == 0:
           list_tem.append(each.i.text)
           i += 1
       elif i > 0:
           list_tem.append([each.span.text, each.i.text])
           i += 1
   # print(list_tem)

   '''
   存放風(fēng)力
   '''
   list_wind = []
   wind_list = soup.find_all('p', class_='win')
   for each in wind_list:
       list_wind.append(each.i.text.strip())
   # print(list_wind)
   return list_day, list_weather, list_tem, list_wind


def get_content(url):
   content = get_web(url)
   day, weather, tem, wind = parse_content(content)
   item = 0
   for i in range(0, 7):
       if item == 0:
           print(day[i]+':\t')
           print(weather[i]+'\t')
           print("今日氣溫:"+tem[i]+'\t')
           print("風(fēng)力:"+wind[i]+'\t')
           print('\n')
           item += 1
       elif item > 0:
           print(day[i]+':\t')
           print(weather[i] + '\t')
           print("最高氣溫:"+tem[i][0]+'\t')
           print("最低氣溫:"+tem[i][1] + '\t')
           print("風(fēng)力:"+wind[i]+'\t')
           print('\n')

以上就是關(guān)于“Python爬蟲(chóng)代碼怎么寫”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前名稱:Python爬蟲(chóng)代碼怎么寫
轉(zhuǎn)載來(lái)源:http://bm7419.com/article20/jcijjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)搜索引擎優(yōu)化、靜態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、網(wǎng)站設(shè)計(jì)、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作