利用python系統自帶的urllib庫寫簡單爬蟲html
urlopen()獲取一個URL的html源碼
read()讀出html源碼內容
decode("utf-8")將字節轉化成字符串python
#!/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> <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==">
正則獲取頁面指定內容web
#!/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()獲取狀態碼post
#!/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抓取超時設置,單位爲秒url
是指抓取一個頁面時對方服務器響應太慢,或者好久沒響應,設置一個超時時間,超過超時時間就不抓取了code
#!/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)