六 web爬蟲講解2—urllib庫爬蟲—基礎使用—超時設置—自動模擬http請求


利用python系統自帶的urllib庫寫簡單爬蟲

urlopen()獲取一個URL的html源碼
read()讀出html源碼內容
decode("utf-8")將字節轉化成字符串

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.request
html = urllib.request.urlopen('http://edu.51cto.com/course/8360.html').read().decode("utf-8")
print(html)
復制代碼
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="csrf-param" content="_csrf">
    <meta name="csrf-token" content="X1pZZnpKWnQAIGkLFisPFT4jLlJNIWMHHWM6HBBnbiwPbz4/LH1pWQ==">
復制代碼

 

正則獲取頁面指定內容

復制代碼
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.request
import re
html = urllib.request.urlopen('http://edu.51cto.com/course/8360.html').read().decode("utf-8")   #獲取html源碼
pat = "51CTO學院Python實戰群\((\d*?)\)"      #正則規則,獲取到QQ號
rst = re.compile(pat).findall(html)
print(rst)

#['325935753']
復制代碼

 

urlretrieve()將網絡文件下載保存到本地,參數1網絡文件URL,參數2保存路徑

復制代碼
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from urllib import request
import re
import os

file_path = os.path.join(os.getcwd() + '/222.html')    #拼接文件保存路徑
# print(file_path)
request.urlretrieve('http://edu.51cto.com/course/8360.html', file_path) #下載這個文件保存到指定路徑
復制代碼

 

urlcleanup()清除爬蟲產生的內存

復制代碼
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from urllib import request
import re
import os

file_path = os.path.join(os.getcwd() + '/222.html')    #拼接文件保存路徑
# print(file_path)
request.urlretrieve('http://edu.51cto.com/course/8360.html', file_path) #下載這個文件保存到指定路徑
request.urlcleanup()
復制代碼

 

info()查看抓取頁面的簡介

復制代碼
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.request
import re
html = urllib.request.urlopen('http://edu.51cto.com/course/8360.html')   #獲取html源碼
a = html.info()
print(a)

# C:\Users\admin\AppData\Local\Programs\Python\Python35\python.exe H:/py/15/chshi.py
# Date: Tue, 25 Jul 2017 16:08:17 GMT
# Content-Type: text/html; charset=UTF-8
# Transfer-Encoding: chunked
# Connection: close
# Set-Cookie: aliyungf_tc=AQAAALB8CzAikwwA9aReq63oa31pNIez; Path=/; HttpOnly
# Server: Tengine
# Vary: Accept-Encoding
# Vary: Accept-Encoding
# Vary: Accept-Encoding
復制代碼

 

getcode()獲取狀態碼

復制代碼
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.request
import re
html = urllib.request.urlopen('http://edu.51cto.com/course/8360.html')   #獲取html源碼
a = html.getcode()  #獲取狀態碼
print(a)

#200
復制代碼

 

 

geturl()獲取當前抓取頁面的URL

復制代碼
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.request
import re
html = urllib.request.urlopen('http://edu.51cto.com/course/8360.html')   #獲取html源碼
a = html.geturl()  #獲取當前抓取頁面的URL
print(a)

#http://edu.51cto.com/course/8360.html
復制代碼

 

timeout抓取超時設置,單位為秒

是指抓取一個頁面時對方服務器響應太慢,或者很久沒響應,設置一個超時時間,超過超時時間就不抓取了

復制代碼
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.request
import re
html = urllib.request.urlopen('http://edu.51cto.com/course/8360.html',timeout=30)   #獲取html源碼
a = html.geturl()  #獲取當前抓取頁面的URL
print(a)

#http://edu.51cto.com/course/8360.html
復制代碼

 

 

自動模擬http請求

http請求一般常用的就是get請求和post請求

get請求

比如360搜索,就是通過get請求並且將用戶的搜索關鍵詞傳入到服務器獲取數據的

所以我們可以模擬百度http請求,構造關鍵詞自動請求

quote()將關鍵詞轉碼成瀏覽器認識的字符,默認網站不能是中文

復制代碼
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib.request
import re
gjc = "手機"     #設置關鍵詞
gjc = urllib.request.quote(gjc)         #將關鍵詞轉碼成瀏覽器認識的字符,默認網站不能是中文
url = "https://www.so.com/s?q="+gjc     #構造url地址
# print(url)
html = urllib.request.urlopen(url).read().decode("utf-8")  #獲取html源碼
pat = "(\w*<em>\w*</em>\w*)"            #正則獲取相關標題
rst = re.compile(pat).findall(html)
# print(rst)
for i in rst:
    print(i)                            #循環出獲取的標題

    # 官網 < em > 手機 < / em >
    # 官網 < em > 手機 < / em >
    # 官網 < em > 手機 < / em > 這么低的價格
    # 大牌 < em > 手機 < / em > 低價搶
    # < em > 手機 < / em >
    # 淘寶網推薦 < em > 手機 < / em >
    # < em > 手機 < / em >
    # < em > 手機 < / em >
    # < em > 手機 < / em >
    # < em > 手機 < / em >
    # 蘇寧易購買 < em > 手機 < / em >
    # 買 < em > 手機 < / em >
    # 買 < em > 手機 < / em >
復制代碼

 post請求

urlencode()封裝post請求提交的表單數據,參數是字典形式的鍵值對表單數據
Request()提交post請求,參數1是url地址,參數2是封裝的表單數據

復制代碼
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib.request
import urllib.parse

posturl = "http://www.iqianyue.com/mypost/"
shuju = urllib.parse.urlencode({                #urlencode()封裝post請求提交的表單數據,參數是字典形式的鍵值對表單數據
    'name': '123',
    'pass': '456'
    }).encode('utf-8')
req = urllib.request.Request(posturl,shuju)     #Request()提交post請求,參數1是url地址,參數2是封裝的表單數據
html = urllib.request.urlopen(req).read().decode("utf-8")  #獲取post請求返回的頁面
print(html)
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM