python爬蟲學習筆記(1)

2021-10-07 09:28:08 字數 3034 閱讀 7416

2.parse模組

遇到了問題

本人使用了anaconda3中的python3環境,進行爬蟲的環境為anaconda中的spyder,使用anaconda具體詳細原因及安裝教程可見

anaconda3詳細安裝使用教程及問題總結

request就是請求的意思,主要用於url資訊的請求

import urllib.request

#首先需要引用這個模組

response = urllib.request.urlopen(

"")#同構該模組的urlopen函式開啟「**」,將響應結果返回至response中,此時返回的是位元組流

result = response.read(

).decode(

"utf-8"

)#通過將response的內容讀出,並作utf-8的解碼,將該位元組流轉化為字元流

#初步認為utf-8是大多數網頁的編碼方式

printf(result)

urlopen()詳細介紹可見python中urlopen()介紹

這個函式看著很奇怪,因為他就是之前urllib中request模組中首字母r進行大寫後的名稱。

通過request()方式請求訪問**可用進行重構user-agent,操作為

import urllib.request

url =

""headers =

#以上所初始化的是url,以及headers,url就是訪問的**,headers就是所設定的瀏覽器引數,通過這個引數進行模仿。

#初步認為這url和headers加在一起可以作為user-agent

req = urllib.request.request(url,headers=headers)

#將之前構造的user-agent放入requst函式中作為引數,得到了這個訪問請求的新的物件

res = urllib.request.urlopen(req)

html = res.read(

).decode(

"utf-8"

)#print(html)

print

(res.getcode())

#getcode就是獲取此次爬取網頁的http響應碼,有很多的值,主要200是響應成功的。

print

(res.geturl())

#返回此次爬取網頁的**

通過上面的直接使用urlopen()以及先用request()構造新的user-agent在使用urlopen()開啟,可以看出來,url本身就可以作為urlopen的引數,也可以通過request給url加了個headers後,再作為urlopen的引數。

更多的瀏覽器請求頭可以參考瀏覽器user-agent彙總

parse的意思是解析,這個模組主要就是用於encode轉碼操作。

按我的理解,urlencode()是的作用說白了就是將構造成的key=encode(value)字串格式,用於url的構造。舉例,

import urllib.request

import urllib.parse

baseurl =

"s?"

#url前半部分

key =

input

("請輸入要搜尋的內容:"

)key = urllib.parse.urlencode(

)#url後半部分

#urlencode將編碼而成為"wd=%e8%a3%e6..."的形式

url = baseurl + key

#url拼接

headers =

req = urllib.request.request(url,headers=headers)

res = urllib.request.urlopen(req)

html = res.read(

).decode(

"utf-8"

)#這裡就是熟悉的操作

with

open(,

"w",encoding=

"utf-8"

)as f:

f.write(html)

#這個語句是將所搜尋的內容html儲存到乙個檔案中,上面的open使用中引數分別是檔名,w表示寫,編碼方式。

#這裡的編碼方式需要注意,如果所寫的方式不是訪問頁面的編碼方式,當開啟這個html檔案的時候就會出現亂碼

很奇怪的是,parse中雖然提供了的urlencode方式,卻沒有對應的urldecode方式。下面介紹另一種編碼方式。

quote簡單粗暴,它就是直接將value的值進行編碼,轉換為%e8…。

在拼接url的時候就可以直接

baseurl =

"s?wd="

key =

input

("請輸入要搜尋的內容:"

)key = urllib.parse.quote(key)

# 將key直接編碼為"%e8%a3%e6..."

url = baseurl + key

quote就有對應的反quote的函式,unquote,顧名思義,就是進行解碼。

在學習過程中,對**還不是很理解,導致將他人**敲入後,爬取了資訊把並存入了乙個html檔案,結果開啟出現亂碼。

已解決

html檔案開啟出現亂碼,但將其轉換為txt格式開啟確實有正常**的,查明原因後知道了是由於編碼解碼方式等原因而導致的。

一開始我是直接將檔案另存時,設定其編碼方式,在新建檔案開啟時正常顯示。後發現了原因,是在從網頁爬取資訊下來的時候解碼方式是utf-8,然而在儲存至html檔案中時選擇的是gb18030的方式,將其修改為utf-8後正常顯示。但所參考的**的作者意圖就不得而知了。

網路不給力,請稍後重試

(大部分省略)

查明原因可能時**方面的問題,被伺服器拒絕加入了,具體如何操作較為複雜,畢竟我是初學者,看也看不懂。

未解決

此次學習主要參考於spider(二) ——正則

Python 爬蟲學習筆記1

urllib模組 urllib.requests 開啟和讀取urls urllib.error 包含urllib.requests 產生的常見錯誤,使用try捕捉 urllib.parse 包含即係url方法 urllib.robotparse 解析robots.txt檔案 網頁編碼問題解決 cha...

python網路爬蟲學習筆記(1)

一 三種網頁抓取方法 1 正規表示式 模組使用c語言編寫,速度快,但是很脆弱,可能網頁更新後就不能用了。2 beautiful soup 模組使用python編寫,速度慢。安裝 pip install beautifulsoup4 3 lxml 模組使用c語言編寫,即快速又健壯,通常應該是最好的選擇...

python爬蟲筆記(1)

人稱君子協議,規定了 中哪些資料是可以被爬取的 哪些 是不可以被爬取的。相比http協議,它是安全的超文字傳輸協議,採用證書金鑰加密 requests模組 python中原生的一款基於網路請求的模組,功能強大,簡單便捷,相對於urllib模組效率更高。作用 模擬瀏覽器傳送請求。如何使用 import...