利用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>
<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)
【轉載自:
http://www.lqkweb.com】