1. 程式人生 > >【Python52--爬蟲1】

【Python52--爬蟲1】

一、Python如何訪問網際網路

採用urllib包來訪問

二、理論

1、請問URL是“統一資源識別符號”還是“統一資源定位符”

URI是統一資源識別符號,URL是統一資源定位符。即:URI是用字串表示某一網際網路資源,URL是用字元迴圈表示資源的地址,因此URI是父類,URL是子類

2、urllib.request.urlopen()返回的是什麼型別的資料

 
 
 
import urllib.request
url = "https://ilovefishc.com"
response = urllib.request.urlopen(url).read()
a = response.decode("
utf-8") print(a)
 

3、當目標網站使用的是自簽名的證書時就會丟擲錯誤:urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)>

#解決辦法:匯入import ssl   和 ssl._create_default_https_context = ssl._create_unverified_context

import urllib.request
import ssl
ssl._create_default_https_context 
= ssl._create_unverified_context url = "https://ilovefishc.com" response = urllib.request.urlopen(url).read() a = response.decode("utf-8") print(a)

4、下載https://fishc.com.cn/首頁,並列印前300個位元組

import urllib.request
import ssl
import chardet
ssl._create_default_https_context = ssl._create_unverified_context
url 
= "https://fishc.com.cn/" response = urllib.request.urlopen(url).read() #chardet.detect(response) print(response.decode("charmap","ignore"))

只是擴充套件:如果不知道網站採用的是什麼編碼格式,如何解決

方法:

1)、安裝chardet模組:pip install

2)、匯入:>>import chardet

3)、輸入:>>chardet.detect(response)

  >> {'confidence': 0.99, 'encoding': 'GB2312'}

4)、如果輸出的是:GB2312

5)、採用:>>

 if chardet.detect(response)['encoding'] == 'GB2312':

    response.decode('GBK')

In [1]: import urllib.request

In [2]: import ssl

In [3]: ssl._create_default_https_context = ssl._create_unverified_context

In [4]: url = "https://fishc.com.cn/"

In [5]: response = urllib.request.urlopen(url).read()

In [6]: import chardet

In [7]: chardet.detect(response)
Out[7]: 
{'encoding': 'Windows-1254',
 'confidence': 0.45397661418528873,
 'language': 'Turkish'}

#################################
#知道了編碼格式是:Windows-1254',則進行後續程式碼編寫
import urllib.request
import ssl
import chardet
ssl._create_default_https_context = ssl._create_unverified_context
url = "https://fishc.com.cn/"
response = urllib.request.urlopen(url).read()
#chardet.detect(response)
print(response.decode("charmap","ignore"))

5、寫一個程式,依次訪問檔案中指定的站點,並將每個站點返回的內容依次存放到不同的檔案中