Python Learning Day3

爬蟲練習html

說是練習,實際是嘗試了一些尚未具體瞭解的方式吧hhhhh'python

基於urllib實現

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)
相關文章
相關標籤/搜索