網路爬蟲 學習日誌(一)

2021-09-22 05:46:18 字數 4155 閱讀 8346

學習get與post請求,嘗試使用requests或者是urllib用get方法向

發出乙個請求,並將其返回結果輸出。

如果是斷開了網路,再發出申請,結果又是什麼。了解申請返回的狀態碼。

了解什麼是請求頭,如何新增請求頭。

學習什麼是正規表示式並嘗試一些正規表示式並進行匹配。

然後結合requests、re兩者的內容爬取裡的內容

要求抓取名次、影片名稱、國家、導演等字段。

一些前期準備:

http基本原理:

如:是協議名,blog.csdn.net 是服務位址,behrends則是檔案路徑

uri全稱為統一資源識別符號。url是是uri的子集

解:

import requests

resp = requests.get('',headers=headers)

print(resp.text) # 列印出網頁源**

print(resp.status_code) # 列印出狀態呼叫status屬性可以返回結果的狀態碼。

結果:

1.請求方法:

常見的請求方法有get和post

get和post的區別:

1.get是從伺服器上獲取資料,get請求引數包含在url裡面,資料可以在url中看到,post是向伺服器傳送資料,因此get安全性非常低,post安全性較高。但是執行效率卻比post方法好

2.get傳送的資料量較小,不能大於2kb。post傳送的資料量較大,一般被預設為不受限制。在進行檔案上傳時只能使用post而不能是get。

如果把閘道器了就會出現 11001的報錯。:

常見的狀態碼:200成功,404頁面未知道,500伺服器內部錯誤

connectionerror: httpsconnectionpool(host='www.baidu.com', port=443): max retries exceeded with url: / (caused by newconnectionerror(': failed to establish a new connection: [errno 11001] getaddrinfo failed',))
請求頭,用來說明伺服器要使用附加資訊,比較重要的資訊有,比如cookie,referer,user-agent等

http請求頭,http客戶程式(例如瀏覽器),向伺服器傳送請求的時候必須指明請求型別(一般是get或者post)。如有必要,客戶程式還可以選擇傳送其他的請求頭。

請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號「:」分隔。請求頭部通知伺服器有關於客戶端請求的資訊,典型的請求頭有:

最後乙個請求頭之後是乙個空行,傳送回車符和換行符,通知伺服器以下不再有請求頭。

叫正規表示式,是因為它們可以識別正則字串(regular string)

常用的正規表示式符號:符號

含義例子

匹配結果

*匹配前面的的字元、子表示式或括號內的字元0次或多次

a*b*

aaaaa,aabbbb,bbbbbb

+匹配前面的的字元、子表示式或括號內的字元至少一次

a+b+

aaaaaab,aabbbbb,abbbbb

匹配任意乙個字元(相當於「任選乙個」)

[a-z]*

()表示式編組(在正規表示式的規則裡編組會優先 執行

(a*b)*

aaabaab,abaaab, ababaaaaab

匹配前面的字元、子表示式或括號裡的字元 m 到 n 次(包含 m 或 n)

abaabbb,aaabbb,aabb

[^]匹配任意乙個不在中括號裡的字元

[^a-z]*

|匹配任意乙個由豎線分割的字元、子表示式(注 意是豎線,不是大字字母 i)

b(a|i|e)d 

bad,bid,bed

.匹配任意單個字元(包括符號、數字和空格等)

b.d 

bad,bzd,b$d,b d 

^指字串開始位置的字元或子表示式 

^a \

轉義字元(把有特殊含義的字元轉換成字面形式) 

\.\ | \\ 

. | \ 

$經常用在正規表示式的末尾,表示「從字串的 末端匹配」。如果不用它,每個正規表示式實際都 帶著「.*」模式,只會從字串開頭進行匹配。這 個符號可以看成是 ^ 符號的反義詞

[a-z]*[a-z]*$ 

abcabc,zzzyx,bob

?!「不包含」。這個奇怪的組合通常放在字元或正則 表示式前面,表示字元不能出現在目標字串裡。 這個符號比較難用,字元通常會在字串的不同 部位出現。如果要在整個字串中全部排除某個 字元,就加上 ^ 和 $ 符號

^((?![a-z]).)*$

no-caps-here,$ymb0ls a4e f!ne

因此對於郵箱來說:正規表示式是:[a-za-z0-9\._+]+@[a-za-z]+\.(com|org|edu|net)

import requests

import re

for i in range(10):

url='?start='+str(i*25)#翻頁迴圈設定:通過對start賦值以25的倍數

html=requests.get(url).text

regex='(\d+).*?(.*?).*?(.*?)

.*?(.*?).*?(.*?).*?(.*?)'

pattern=re.compile(regex,re.s)

results=re.findall(pattern,html)

print(results)

參考文章:

結果是:

[('1', '肖申克的救贖', '\n                            導演: 弗蘭克·德拉邦特 frank darabont   主演: 蒂姆·羅蘋斯 tim robbins /...

\n 1994 / 美國 / 犯罪 劇情\n ', '9.6', '1418723人評價', '希望讓人自由。'),

這樣雖然得到了想要的結果,但是得到的資料比較雜亂,將匹配結果進一步進行處理,這裡對"描述「裡面的特殊字元 和

進行處理,利用re模組的sub函式將其替換為空字串 將得到的新的描述以及爬取到的其他內容資訊儲存到dict字典當中去。匯入json庫,將字典內容儲存到txt文字中。

import requests

import re

import json

for i in range(11):

url='?start='+str(i*25)#翻頁迴圈設定:通過對start賦值以25的倍數

html=requests.get(url).text

regex='(\d+).*?(.*?).*?(.*?)

.*?(.*?).*?(.*?).*?(.*?)'

pattern=re.compile(regex,re.s)

results=re.findall(pattern,html)

#對得到的list列表進行處理

for item in results:

content=""

for every_list in item[2].split():

content=content+"".join(every_list)

content=re.sub(' ',' ',content)

content=re.sub('

', '', content)

print(content)

#將獲取到的資訊儲存到字典中

dict=

with open('豆瓣top250.txt','a',encoding='utf-8') as f:

f.write(json.dumps(dict,ensure_ascii=false)+'\n')

開啟txt:

學習python寫網路爬蟲(一)

最簡單的爬蟲 import urllib2 defdownload url return urllib2.urlopen url read print download 更加健壯的版本,可以捕獲異常了 import urllib2 defdownload url print downloading ...

Python網路爬蟲學習scrapy 一

總結乙個今天的學習過程 1,上午繼續嘗試昨天的問題 客戶端putty登陸遠端windows不能輸入命令的問題 可以說是坎坷的不行 原因是安裝freesshd軟體時,最後乙個是否選擇問題 是否以系統服務的方式啟動,這裡選擇否,千萬不要選擇是,這樣就可以在登陸後在輸入框中輸入命令了 這事王師兄替我嘗試安...

網路爬蟲理解學習筆記(一)

網路爬蟲是自動從網際網路定向或不定向地採集資訊地一種程式工具。網路爬蟲分為很多類別,常見的有批量型網路爬蟲 增量型網路爬蟲 通用爬蟲 垂直網路爬蟲 聚焦爬蟲 通用爬蟲 首先給定初始url,爬蟲會自動獲取這個url上的所有url並將已經在爬取的位址存放在已爬取列表中。將新的url放在佇列並依次讀取新的...