爬蟲練習html
說是練習,實際是嘗試了一些尚未具體瞭解的方式吧hhhhh'python
import urllib.request import re url="https://www.zhihu.com/question/21100397" # 咱們要爬取圖片的地址 page = urllib.request.urlopen(url) # 第一行 打開網址 html = page.read().decode("utf-8") # 第二行 獲取html源碼 imglist = re.findall('img src="(http.*?)"',html) # 第三行 在html中匹配出符合條件的字符串 x=0 for imgurl in imglist: # 遍歷圖片地址列表 urllib.request.urlretrieve(imgurl,'pic%s.jpg' %x) # 第四行 獲取圖片並保存 x=x+1
定義函數的三種方式json
# 無參函數 # 不須要接收外部傳入的參數 def foo(): print('from foo..') foo() # # 有參函數 # 須要接收外部傳入的參數 def login(user, pwd): print(user, pwd) # 傳參多一或少一不可 #login('tank', '123') # login('tank', '123', 111) # 多,報錯 # login('tank') # 少,報錯 # # x = 10 # # y = 20 # # if x > y: # # print(x) # # else: # # print(y) # 比較兩數大小 def max2(x, y): if x > y: print(x) else: print(y) max2(10, 30) # 空函數 # 遇到一些比較難實現的功能,會致使暫時沒法繼續編寫代碼。 # 因此通常在生產開發中,都會將全部功能實現定義成空函數。 def func(): pass # pass表明什麼都不作
函數的返回值
在調用函數時,須要接收函數體內部產生的結果,則return返回值。瀏覽器
def max2(x, y):app
if x > y:函數
return xurl
else:spa
return y操作系統
res = max2(10, 5)code
print(res)
函數對象
指的是函數名指向的內存地址。
def func(): pass # print(func) # <function func at 0x101dd2e18> # # func() def func2(): pass # 把函數對象,傳入字典中 dict1 = { '1': func, '2': func2 } choice = input('請輸入功能編號:').strip() # if choice == '1': # func() # elif choice == '2': # func2() # # 若用戶選擇函數對象對應的key值,則調用該函數 if choice in dict1: dict1[choice]() # dict1['1']
函數嵌套:
嵌套定義:
在函數內,定義函數。
嵌套調用:
def func1(): print('func1...') def func2(): print('func2...') def func3(): print('func3...') # .... return func3 return func2 # 經過函數內部的函數值,調用函數 func2 = func1() func3 = func2() func3() # 函數嵌套調用 def func1(): print('func1...') def func2(): print('func2...') def func3(): print('func3...') # .... func3() func2() func1()
名稱空間
python解釋器自帶的: 內置名稱空間
自定義的py文件內,頂着最左邊定義的: 全局名稱空間
函數內部定義的: 局部名稱空間
name = 'tank' def func1(): # name = 'abc' print() def func2(): print('func2...') # print(name, '全局打印') func1()
引用本身編輯的包以及文件
import B # from # 導入B模塊中的a文件 # 會自動執行a文件中的代碼 from B import a # __name__: B.a # a
經常使用模塊(內置模塊)
time 時間模塊
import time # 導入time模塊 # 獲取時間戳 print(time.time()) # 等待2秒 time.sleep(2) print(time.time())
os 模塊
# 與操做系統中的文件進行交互 # 判斷tank.txt文件是否存在 print(os.path.exists('test.txt')) # True print(os.path.exists('test1.txt')) # False print(os.path.exists(r'C::\Users\liubin\Desktop\test.txt')) # True # 獲取當前文件的根目錄 print(os.path.dirname(__file__)) # D:/python_files/day03
sys模塊
import sys # 獲取python在環境變量中的文件路徑 print(sys.path) # 把項目的根目錄添加到環境變量中 sys.path.append(os.path.dirname(__file__)) print(sys.path)
json模塊
import json # user_info = { # 'name': 'tank', # 'pwd': '123' # } # dumps: 序列化 # 一、把字典轉行成json數據 # 二、再把json數據轉換成字符串 res = json.dumps(user_info) print(res) print(type(res)) with open('user.json', 'wt', encoding='utf-8') as f: f.write(res) # loads: 反序列化 # json.loads() # 一、把json文件的數據讀到內存中 with open('user.json', 'r', encoding='utf-8') as f: # # 讀取獲得的是字符串 res = f.read() # # print(type(res)) # # loads把json格式的字符串轉換成dict類型 user_dict = json.loads(res) print(user_dict) # {'name': 'tank', 'pwd': '123'} print(type(user_dict)) # <class 'dict'> # dump user_info = { 'name': 'tank', 'pwd': '123' } with open('user_info.json', 'w', encoding='utf-8') as f: # str1 = json.dumps(user_info) # f.write(str1) # dump: 自動觸發f.write方法 json.dump(user_info, f) # load with open('user_info.json', 'r', encoding='utf-8') as f: # res = f.read() # user_dict = json.loads(res) # print(user_dict) # load:自動觸發f.read() user_dict = json.load(f) print(user_dict)
http協議:
請求url:
https://www.baidu.com/
請求方式:
GET
請求頭:
Cookie: 可能須要關注。
User-Agent: 用來證實你是瀏覽器
注意: 去瀏覽器的request headers中查找
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36
Host: www.baidu.com
requests模塊使用
import requests response = requests.get(url='https://www.baidu.com/') response.encoding = 'utf-8' print(response) # <Response [200]> # # 返回響應狀態碼 print(response.status_code) # 200 # 返回響應文本 # print(response.text) print(type(response.text)) # <class 'str'> with open('baidu.html', 'w', encoding='utf-8') as f: f.write(response.text)
爬取梨視頻
import requests res = requests.get('視頻地址') print(res.content) with open('視頻.mp4', 'wb') as f: f.write(res.content)