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...