【繁中】Python 教學 爬蟲基礎
Python
文章目录
- Python
- __init__、__new__和__call__
- 型態
- len(資料)
- Tuple
- 特殊字串
- 成員運算子
- input
- 集合Set 基本語法
- Set 運算子
- 字典Dictionary 基本語法
- 判斷式
- 四則運算
- 流程控制:迴圈基礎
- range()
- while 迴圈
- for 迴圈
- break
- continue
- else
- 綜合範例
- 函式
- 1. 定義函式
- 2. 定義參數的預設值
- 使用參數名稱對應
- 無限/不定 參數資料
- torch.nn.funtional.softmax()
- map(function, iterable, ...)
- lambda教學結合map,sort
- Data Structure - 資料結構
- 安裝第三方套件
- 安裝BeautifulSoup
- Module 模組
- 載入
- 使用
- 內建模組 - sys 模組
- 自訂模組的設計
- 建立幾何運算模組
- 載入
- 調整搜尋模組的路徑
- 封包的設計與使用
- 建立封包
- 使用封包
- 讀取、儲存文字檔案
- 開啟檔案
- 最佳實務:使用 with ... as ... 語法
- 讀取檔案
- 寫入檔案
- 關閉檔案
- 範例
- 使用JSON格式讀取,複寫檔案
- Class的定義與使用
- class定義
- class使用
- 實體物件的建立與使用
- 建立實體物件
- 使用實體
- 實體方法
- 使用實體方法
- 網路連線程式、公開資料串接
- 確認公開資料格式
- 載入urllib模組、下載特定網址資料
- 網路連線
- 串接,擷取公開資料
- 網路爬蟲 Web Crawler
- 抓取的網頁,取得網址
- 安裝BeautifulSoup
- 實務操作:抓取 [PTT 電影版](https://www.ptt.cc/bbs/movie/index.html)的文章標題
- 看起來像人類
- 解析原始碼
- Cookie 操作實務
- 追蹤網頁連結
- 連續抓取頁面實務
- ptt八卦板
- 觀察網路連線
- 不斷抓別的頁面
- PTT 八卦板 連續抓3頁標題
- AJAX / XHR 網站技術分析實務
- Medium 文章列表 (舊版)
- 抓取知名網站medium.com的首頁文章列表
- Request Data 操作實務
- 抓取 Medium.COM 網站的文章列表資料 2021 版
- 抓取 Medium.COM 網站實務操作
- Flask 網站架設
- 基礎環境建置
- Heroku 雲端主機教學
- 建立檔案
- 安裝[Git Tool](https://git-scm.com/)
- 註冊[Heroku](https://www.heroku.com/)
- 安裝Download and install the [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli#download-and-install)
- Heroku 專案
- 如果修改程式,還沒反應到線上
- argparse
- tags: `Python`
:::info PPT
課程
PPT檢視文檔
Python 基礎 - 複習
排版教學
HackMD完整功能
:::
:::warning
VScode python
Shift + Alt + F
自動排版
ctrl+C
強制結束
ctrl+/
全部註解
:::
init、new__和__call
https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/364923/
https://ithelp.ithome.com.tw/m/articles/10231756
型態
- int (整數)
- float (浮點數)
- bool (布林值)
- str (字串)
- List(列表) : [ ]
- Tuple(元组) : ( ) 不能更動裡面的內容
- Dictionary(字典) : { }
- None(空)
len(資料)
回傳(字數、list等)長度或項目個數。
Tuple
元組基本語法
變數 = (東西1, 東西2, ...)
元組中只包含一個元素時
需要在元素後面加逗號(,)
tup = (50,)
特殊字串
如果字串裡面有包含特殊字元
要使用脫逸字元 反斜線
\
成員運算子
運算子 | 意義 |
---|---|
in
|
在指定的序列中找到值返回True ,否則返回False
|
not in
|
指定的序列中沒有找到值返回True ,否則返回False
|
s=[1,2,3]
print(3 in s)
#print True
input
取得字串形式的使用者輸入
x=input("請輸入數字:")
x=int(x) #將字串轉換成數字型態
集合Set 基本語法
自動把字串拆解成集合
set("字串")
s=set("Hello")
print(s)
# print {'l','H','e','o'} :順序是隨機的print("H" in s) #print True
Set 運算子
運算子 | 意義 |
---|---|
&
|
交集: 取兩個集合中,相同的資料 |
|
|
聯集: 取兩個集合中的所有資料,但不重複取 |
-
|
差集: 從S1中,減去和S2重疊的部分 |
^
|
反交集: 取兩個集合中,不重疊的部分 |
字典Dictionary 基本語法
key-value 配對
變數 = {key1:value1, key2:value2, ...}
key是唯一的,如果重複,最後一個key的value會代替前面的
value可以重複沒關係
只能用key去拿value
所以要修改value時,只能用key去找
也可以用
in
去搜尋key值
刪除字典中的key-value pair
del dic["key"]
從列表的資料產生字典
dic={x:x*2 for x in 列表}
範例
dic={"apple":"蘋果","bug":"蟲蟲"} #字典
# key: apple,bug
print(dic["apple"]) #print 蘋果#刪除apple鍵值對
del dic["apple"] #轉換鍵值對
dic={x:x*2 for x in [3,4,5]}
print(dic)
# print {3: 6, 4: 8 ,5: 10}
判斷式
if (條件式一):條件式一成立,要做的事elif (條件式二):條件式二成立,要做的事else:上述條件式都不成立,要做的事
要記得加
:
四則運算
n1=int(input("請樹入數字1:"))
n2=int(input("請樹入數字2:"))
op=input("請樹入運算: +, -, *, /")if op=="+":print(n1+n2)
elif op=="-":print(n1-n2)
elif op=="*":print(n1*n2)
elif op=="/":print(n1/n2)
else:print("不支援")
流程控制:迴圈基礎
range()
# 不包含3
for 變數名稱 in range(3):||for 變數名稱 in [0,1,2]:
# 不包含6
for 變數名稱 in range(3, 6):||for 變數名稱 in [3,4,5]:
while 迴圈
while迴圈基本語法
while (條件):條件成立要做的事
for 迴圈
for迴圈基本語法
for 變數 in 列表或字串:要做的事
for c in "Hello":print("逐一取得字串中的字元",c)"""
H
e
l
l
o
"""
要記得加
:
break
強制結束迴圈
n=1
while n<5:if n==3:breakn+=1
print(n) #print 3
continue
強制執行下一圈
忽略接下來的程式,跳進下一圈迴圈
範例
n=0
for x in range(4):if x%2==0:# if True 直接進入下一圈,不執行n+=1continue #if 偶數,直接跳新迴圈print(x) #列出非偶數n+=1 #計算非偶數數量
print("最後的 n:",n)
else
迴圈結束前執行此區塊的命令
while 布林值:...
else:迴圈結束前執行此區塊的命令
for 變數 in 列表或字串:要做的事
else:迴圈結束前執行此區塊的命令
要記得加
:
:::info
用break強制結束迴圈時,不會執行else區塊
:::
綜合範例
找出整數平方根
輸入9. 得到 3.
輸入11 得到"沒有"整數平方根
n=int(input("請輸入數字"))
for i in range(n):if i*i == n:print("找到整數平方根",i)break
else: #全部迴圈跑完之後,沒有執行到break 才會進入此區塊print("沒有 整數平方根")
函式
1. 定義函式
def 函式名稱(參數名稱):內部程式碼return 資料 #or 結束函式,回傳None
要記得加
:
2. 定義參數的預設值
def 函式名稱(參數名稱=預設資料):內部程式碼return 資料
:::info
example
def power(base ,exp=0):print(base**exp)power(3,2) # print 9
power(4) # 少一個參數,用預設值
:::
回傳與回傳值
2.1 使用 return 結束函式
2.2 使用 return 定義回傳值
2.3 呼叫函式後,如何串接回傳值def add(n1, n2):result = n1+n2return result# call func. get return value=add(3,4) print(value) # print 7
使用參數名稱對應
呼叫函式,以參數名稱對應資料
def 函式名稱(名稱1,名稱2):內部程式# 呼叫函式,以參數名稱對應資料
函式名稱(名稱2=3,名稱1=5)
def divide(n1,n2):result=n1/n2print(result)divide(2,4) #印出0.5
divide(n2=2,n1=4) #print 2.0
無限/不定 參數資料
在參數名稱前面加*
def 函式名稱(*無限參數): #在參數名稱前面加*無限參數以Tuple資料形態處理函式內部的程式碼# 呼叫函式,可傳入無線數量的參數
函式名稱(資料1,資料2,資料3)
# 函式接受無限參數msgs
def say(*msgs):#Tuple的方式處理for msg in msgs:print(msg)
#呼叫函式,傳入三個參數資料
say("Hello","Arbitrary","Arguments")# 平均數
def avg(*nums):sum=0for n in nums: # 把Tuple中的資料拿出來放入nsum=sum+nreturn sum/len(nums)
:::info
更多
- 函式的目的:包裝需要重複利用的程式碼。
- 參數的目的:替函式加入更多彈性。
- 回傳值的目的:將函式內部的資料傳遞出來。
:::
範例 SUM
def calculate(n):sum=0for i in range(1,n+1):sum=sum+ireturn sumprint(calculate(10))
要記得加
:
torch.nn.funtional.softmax()
torch.nn.functional.Softmax(input,dim=1)
要注意的是当dim=0时, 是对每一维度相同位置的数值进行softmax运算,举个栗子:
每一个维度(2,3)对应的数值相加为1,例如:
在第0维度中:
- [0][0][0]+[1][0][0]=0.0159+0.9841=1
- [0][0][1]+[1][0][1]=0.6464+0.3536=1
在第1维度中:
- [0][0][0]+[0][1][0]=0.1058+0.8942=1
在第2维度中:
- [1][0][0]+[1][1][0]=0.3189+0.6811=1
map(function, iterable, …)
https://www.runoob.com/python/python-func-map.html
input = [1, 2, 3, 4, 5]
output = list(map(lambda x: x+1, input))
print(output)
>>> [2, 3, 4, 5, 6]
参数
- function – 函数
- iterable – 一个或多个序列
返回值
- Python 2.x 返回列表。
- Python 3.x 返回迭代器(iterator)。
map使用教學
lambda教學結合map,sort
Data Structure - 資料結構
https://algorithm.yuanbin.me/zh-tw/basics_data_structure/linked_list.html#python
安裝第三方套件
PIP 套件管理工具
安裝python時,就一起安裝在你的電腦裡了
python 加入環境變數path中 才能使用pip指令 > https://hackmd.io/@yizhewang/B1zdXG4br
安裝BeautifulSoup
pip install beautifulsoup4
解讀 HTML 格式 > 使用第三方套件 BeautifulSoup 來做解析
Module 模組
載入
# 載入
import 模組名稱# 載入+幫模組取別名
import 模組名稱 as 模組別名
使用
模組名稱/別名.函式名稱(參數資料)模組名稱/別名.變數名稱
內建模組 - sys 模組
取得系統相關資訊
# 載入sys模組
import syssys.platform #系統作業系統
sys.maxsize #整數型態最大值
sys.path #模組路徑||# 別名
import ss.platform #系統作業系統
s.maxsize #整數型態最大值
s.path #模組路徑
自訂模組的設計
建立幾何運算模組
- 建立新的geo.py檔案
# 在geo模組中定義幾何運算功能# 計算2點間距離
def distance(x1,y1,x2,y2):return ((x2-x1)**2+(y2-y1)**2)**0.5#計算line斜率
def slope(x1,y1,x2,y2):return (y2-y1)/(x2-x1)
載入
- 在主程式.py中,輸入import (同個路徑)
import geo
result=geo.distance(1,1,5,5)
print(result)
調整搜尋模組的路徑
在模組的搜尋路徑列表中【新增路徑】
sys.path.append("名稱")# 當前路徑下,再加上"名稱"
# 讓python去找"名稱"的資料夾
在專案資料夾中建立一個module資料夾,專門放模組用,但是路徑會跑掉
import sys# 搜尋模組的路徑
print(sys.path) #印出模組的搜尋路徑
# 會印出一個列表,python搜尋模組的位址全部列出來#調整路徑
sys.path.append("modules") # 當前路徑下在+上modulesimport geo
封包的設計與使用
包含模組的資料夾
用來整理分類模組程式
檔案系統中的檔案對應到模組
檔案系統中的資料夾對應到python的封包
建立封包
專案檔案配置
- 專案資料夾
- 主程式.py
- 封包資料夾
- __init __.py (有這個才會被當作封包)
- 模組一.py
- 模組二.py
如果沒有__init __.py,該資料夾會被視為普通的資料夾
專案檔案配置範例
- 專案資料夾
- main.py
- geometry
- __init __.py
- point.py
- line.py
使用封包
import某個封包中的模組
import 封包名稱.模組名稱import 封包名稱.模組名稱 as 模組別名封包名稱.模組名稱.函式
範例
- 先建立一個新的資料夾 geometry
- 在資料夾中建立一個檔案__init__.py (geometry變成"封包"了)
- 在封包中建立新的模組 line.py , point.py
# point.py def distance(x,y):return (x**2+y**2)**0.5
# line.py def len(x1,y1,x2,y2):return (((x2-x1)**2)+((y2-y1)**2))**0.5def slope(x1,y1,x2,y2):return (y2-y1)/(x2-x1)
# main.py主程式 import geometry.point import geometry.line#使用模組 result=geometry.point.distance(3,4) print(result)result=geometry.line.slope(1,1,3,3) print("slope:",result)# 名字太長 使用別名 import geometry.point as point result=point.distance(3,4) print(result)
讀取、儲存文字檔案
開啟檔案 > 讀取或寫入 > 關閉檔案
開啟檔案
檔案物件=open(檔案路徑,mode=開啟模式,encoding=文字編碼)
開啟模式 | 意思 |
---|---|
r
|
讀取模式 |
w
|
寫入模式 |
r+
|
讀寫模式 |
utf-8
|
中文/日文編碼 |
最佳實務:使用 with … as … 語法
:::info
最佳實務
用檔案物件去操作檔案,會自動關閉檔案且安全
with open(檔案路徑, mode=開啟模式) as 檔案物件:讀取或寫入檔案的程式
#以上區塊會自動、安全的關閉檔案
:::
要記得加
:
讀取檔案
- 讀取全部文字
檔案物件.read()
- 一次讀取一行
for 變數 in 檔案物件:從檔案依序讀取每行文字到變數中
- 讀取 JSON 格式
import json #載入json模組 讀取到的資料=json.load(檔案物件)
寫入檔案
寫入文字
檔案物件.write(字串)
寫入換行符號
檔案物件.write("這是範例文字\n")
寫入 JSON 格式
import json json.dump(要寫入的資料, 檔案物件)
關閉檔案
檔案物件.close()
範例
# 存檔案
file=open("data.txt" , mode="w",encoding="utf-8") #開啟 #寫入中文需要用utf-8開啟
file.write("Hello file\nSecond 好棒棒") #操作
file.close() #關閉# 最佳實務:存檔案
with open("data.txt", mode="w",encoding="utf-8") as file:file.write("5\n3")
# 以上區塊會自動、安全的關閉檔案,不需要自己close# 最佳實務:讀檔案
with open("data.txt", mode="r",encoding="utf-8") as file:data=file.read() #一次把所有資料讀出來
print(data)# 打算把file裡面的數字一行行讀出來,並計算總合
sum=0
with open("data.txt", mode="r",encoding="utf-8") as file:for line in file: #一行行讀取sum+=int(line) #把數字讀出加總
print(sum)
使用JSON格式讀取,複寫檔案
先建立一個檔案 config.json在路徑中
【繁中】Python 教學 爬蟲基礎相关推荐
- 骚年,还在为歌荒发愁吗?python教你爬取网易云热门歌单
需求分析 每当歌荒时,总想找那些播放量比较高的歌单听,毕竟这么多人选择的歌单歌曲质量总会有保证. 爬取目标 本文将提取网易云音乐 播放量在1000万 以上的歌单名称,播放量和链接地址. 准备工作 保证 ...
- python爬取工资_找工作如何和HR谈薪资,python教你爬取行业标准工资
找工作不可避免的要涉及到薪酬问题,如何沟通才能最大程度达到自己的预期? 同样level的公司,有人年薪十几万,有的人插了个草标就把自己卖了,面试中被问到具体的薪资数目.常常会陷入要价太高(或者太低)的 ...
- Python教你爬取某团烤肉店铺数据信息并实现数据可视化,吃货还是更多的(内含完整代码)
[课 题]: Python爬取某团店铺数据信息并实现数据可视化 [课程亮点] 1.动态数据抓包演示 2.json数据解析 3.requests模块的使用 4.保存csv [环境介绍] python 3 ...
- python爬取股吧评论_神级的爬虫工程师用Python教你爬取全站股票评论!买哪只有底呢!...
爬取思路是这样的,先挖取所有股票的代码,放进数据库,然后根据股票代码爬取每一只股票的评论,多了,一定要加入代理池,我这里用的上上一篇文章写的代理池,我们给每个股票代码赋予一个状态值,一开始是outst ...
- python爬取酷狗付费音乐_python爬蟲教程:爬取酷狗音樂
在常見的幾個音樂網站里,酷狗可以說是最好爬取的啦,什么彎都沒有,也沒加密啥的,所以最適合小白入門爬蟲 本篇針對爬蟲零基礎的小白,所以每一步驟我都截圖並詳細解釋了,其實我自己看着都啰嗦,歸根到底就是兩個 ...
- Unity官方教學專案 - Character Customization (紙娃娃系統)
專案名稱 : 自訂角色 (Character Customization) 內容描述 : 這個教學專案包含了二個部份,一個是角色建立系統(Avatar Creater),另一個是虛擬世界角色產生系統, ...
- 用免費的電腦資源協助數學的教學,學習與探索_復華中學教師營_中山大學應數系高中數學人才班_2021
"Talk is cheap. Show me the code." ― Linus Torvalds 摘要: 直到, 在學習 R 語言的過程, 才發現有 Markdown 這種文 ...
- PHP Plurk Api基礎教學(一) - 如何製作自動發噗機器人
PHP Plurk Api基礎教學(一) - 如何製作自動發噗機器人 1.第一步 到Plurk PHP APi Google code官網下載最新的PHP API 上面的連結是1.6.2版(聽說已經是 ...
- 摆脱剧荒!教你用 Python 一步步爬取豆瓣电影新榜单
本文以豆瓣电影(非TOP250)为例,从数据爬取.清洗与分析三个维度入手,详解和还原数据爬取到分析的全链路. 作者 | 周志鹏 责编 | 郭 芮 旁友,暑假,已经过了一大半了. 这个遥远而炙热的名 ...
最新文章
- 一文看懂集成学习(详解 bagging、boosting 以及他们的4点区别)
- (转)NGUI研究院之三种方式监听NGUI的事件方法
- JS 提交form表单
- 下载和安装Nginx之添加Nginx作为系统服务(CentOS7为例)
- 将 ASP.NET Core 2.1 升级到最新的长期支持版本ASP.NET Core 3.1
- GIS实用小技巧(三)-CASS怎么添加图例?
- 装机之MBR和GPT
- 获取数据 - 将Excel文件读入矩阵matrix中 - Python代码
- c语言around用法,KET基础语法:介词among和around的用法及例句
- Apache NIO 框架 Mina 使用中出现 too many open files 有关...
- 某合资源网4.5主题 完美无错版 emlog模板
- 物联网卡对企业设备的重要性
- numpy mean
- java金蝶云单据查询_如果在单据上查或下查的“单据关联”界面添加功能
- 【Luogu】重返现世
- 大数据BI框架知识点备注
- html5作品欣赏,8个超棒的HTML5网站设计欣赏
- 华为od机考真题-统计射击比赛成绩
- pytest常用参数
- batch软件功能测试,Batch SMART 最强序列特征[结构域]预测软件
热门文章