国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

全網(wǎng)最詳細(xì)!!Python 爬蟲快速入門

這篇具有很好參考價(jià)值的文章主要介紹了全網(wǎng)最詳細(xì)?。ython 爬蟲快速入門。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 背景

最近在工作中有需要使用到爬蟲的地方,需要根據(jù) Gitlab + Python 實(shí)現(xiàn)一套定時(shí)爬取數(shù)據(jù)的工具,所以借此機(jī)會,針對 Python 爬蟲方面的知識進(jìn)行了學(xué)習(xí),也算 Python 爬蟲入門了。
需要了解的知識點(diǎn):

  • Python 基礎(chǔ)語法
  • Python 網(wǎng)絡(luò)請求,requests 模塊的基本使用
  • BeautifulSoup 庫的使用
  • 正則表達(dá)式
  • Selenium 的基本使用

下面針對上面的每部分做個(gè)簡單的介紹。

小編給大家整理了全套Python爬蟲入門資料,點(diǎn)擊下方鏈接或者掃描二維碼直接領(lǐng)取。

最新全套【Python入門到進(jìn)階資料 & 實(shí)戰(zhàn)源碼 &安裝工具】(安全鏈接,放心點(diǎn)擊)

全網(wǎng)最詳細(xì)??!Python 爬蟲快速入門,python,爬蟲,數(shù)據(jù)庫 2\. Python 基礎(chǔ)語法 ---------------

學(xué)習(xí)任何一門編程語言都必須掌握其語法知識,Python 也不例外。如果有其它變成語言基礎(chǔ),上手 Python 還是非??斓?。

2.1 變量

在 Python 中,定義一個(gè)變量的操作分為兩步:首先要為變量起一個(gè)名字,稱為變量的命名;然后要為變量指定其所代表的數(shù)據(jù),稱為變量的賦值。這兩個(gè)步驟在同一行代碼中完成。

version = '1'

Python 中的變量命名規(guī)范與其它開發(fā)語言差不多,基本的規(guī)則如下:

  • 變量名可以由任意數(shù)量的字母、數(shù)字、下劃線組合而成,但是必須以字母或下劃線開頭,不能以數(shù)字開頭。
  • 不要用 Python 的保留字或內(nèi)置函數(shù)來命名變量。例如,不要用 import 來命名變量,因?yàn)樗?Python 的保留字,有特殊的含義。
  • 變量名對英文字母區(qū)分大小寫。例如,D 和 d 是兩個(gè)不同的變量。

2.2 數(shù)據(jù)類型

Python 中有 6 種基本數(shù)據(jù)類型:數(shù)字(Numbers)、字符串(String)、列表(List)、字典(Dictionary)、元組(Tuple)和集合。

2.2.1 數(shù)據(jù)類型

在 Python 中定義變量后需要及時(shí)指明對應(yīng)的數(shù)據(jù)類型。同時(shí)也可以使用 del 變量名 刪除對象引用。

num = 0
pi = 3.14
name = "abc"
# 定義列表 [],列表元素可以修改
list = [12, 2, 212, 44, 5, 6]
dic = {
    "k1": "v1",
    "k2": "v2",
}
# 集合類型用 set 標(biāo)識, 創(chuàng)建使用 { } 或者 set() 
s1 = {1, 2, 3, 3, 2, 2, 2, 1, "1"}
# 元組用 () 表示,元組的元素不能修改
tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )

del s1

對于每種數(shù)據(jù)類型,都有一些常用的方法:

數(shù)據(jù)類型 方法
字符串
- [ : ]:截取字符串中的一部分(切片),遵循左閉右開原則;
- []:通過索引獲取字符串中字符;
- in:如果字符串中包含給定的字符返回 True;
- not in:成員運(yùn)算符 - 如果字符串中不包含給定的字符返回 True
- capitalize():將字符串的第一個(gè)字符轉(zhuǎn)換為大寫;
- endswith(suffix, beg=0, end=len(string)):檢查字符串是否以指定的字符串結(jié)束,如果是,返回 True,否則返回 False;
- find(str, beg=0, end=len(string)):檢測 str 是否包含在字符串中,如果包含,返回開始的索引值,否則返回-1;
- index(str, beg=0, end=len(string)):跟find()方法一樣,只不過如果str不在字符串中會報(bào)一個(gè)異常;
- len(string):返回字符串長度;
- replace(old, new [, max]):把將字符串中的 old 替換成 new,如果 max 指定,則替換不超過 max 次;
- rstrip():刪除字符串末尾的空格或指定字符;
- split(str=“”, num=string.count(str)):以 str 為分隔符截取字符串,如果 num 有指定值,則僅截取 num+1 個(gè)子字符串。
列表/元組
- len(list):列表元素個(gè)數(shù);
- list(seq):將序列(元組,集合等)轉(zhuǎn)換為列表;
- list.append(obj):在列表末尾添加新的對象;
- list.index(obj):從列表中找出某個(gè)值第一個(gè)匹配項(xiàng)的索引位置;
- list.remove(obj):移除列表中某個(gè)值的第一個(gè)匹配項(xiàng);
- list.clear():清空列表。
字典
- len(dict):計(jì)算字典元素個(gè)數(shù),即鍵的總數(shù);
- key in dict:如果鍵在字典dict里返回true,否則返回false;
- radiansdict.items():以列表返回可遍歷的(鍵, 值) 元組數(shù)組;
- radiansdict.keys():以列表返回一個(gè)字典所有的鍵;
- radiansdict.values():以列表返回字典中的所有值。
2.2.2 類型轉(zhuǎn)換

字符串類型轉(zhuǎn)換通過 str() 函數(shù)可以將一個(gè)變量轉(zhuǎn)換為字符串類型。

  • int(x) 將x轉(zhuǎn)換為一個(gè)整數(shù)。
  • float(x) 將x轉(zhuǎn)換到一個(gè)浮點(diǎn)數(shù)。
  • complex(x) 將x轉(zhuǎn)換到一個(gè)復(fù)數(shù),實(shí)數(shù)部分為 x,虛數(shù)部分為 0。
  • complex(x, y) 將 x 和 y 轉(zhuǎn)換到一個(gè)復(fù)數(shù),實(shí)數(shù)部分為 x,虛數(shù)部分為 y。x 和 y 是數(shù)字表達(dá)式。
  • str(x) 將對象 x 轉(zhuǎn)換為字符串。

2.3 基礎(chǔ)運(yùn)算符

在 Python 中運(yùn)算符基本與其它開發(fā)語言一致,常用的運(yùn)算符有算術(shù)運(yùn)算符、字符串運(yùn)算符、比較運(yùn)算符、賦值運(yùn)算符和邏輯運(yùn)算符。
算術(shù)運(yùn)算符
全網(wǎng)最詳細(xì)??!Python 爬蟲快速入門,python,爬蟲,數(shù)據(jù)庫
比較運(yùn)算符
全網(wǎng)最詳細(xì)!!Python 爬蟲快速入門,python,爬蟲,數(shù)據(jù)庫
邏輯運(yùn)算符
全網(wǎng)最詳細(xì)!!Python 爬蟲快速入門,python,爬蟲,數(shù)據(jù)庫

2.4 控制語句

Python 的控制語句分為條件語句和循環(huán)語句,前者為 if 語句,后者為 for 語句和 while 語句。

2.4.1 if 語句

if 語句主要用于條件判斷,滿足特定條件執(zhí)行語句。

if 條件:  # 注意不要遺漏冒號
    代碼1  # 注意代碼前要有縮進(jìn)
else:  # 注意不要遺漏冒號
    代碼2  # 注意代碼前要有縮進(jìn)

一個(gè)簡單的示例:

grade = 60
if grade >= 60:
    print("及格")
else:
    print("不及格")

2.4.2 for 循環(huán)

for 語句常用于完成指定次數(shù)的重復(fù)操作

for i in 序列:  # 注意不要遺漏冒號
      要重復(fù)執(zhí)行的代碼  # 注意代碼前要有縮進(jìn)

簡單示例:

numbers = [12, 2, 212, 44, 5, 6]
for item in numbers:
    print(item)

2.4.3 while 語句

while 語句用于在指定條件成立時(shí)重復(fù)執(zhí)行操作。

while 條件:  # 注意不要遺漏冒號
        要重復(fù)執(zhí)行的代碼  # 注意代碼前要有縮進(jìn)

簡單示例:

a = 60
while a < 70:
        print(a)
        a = a + 1

2.5 函數(shù)

Python 提供了諸多的內(nèi)置函數(shù),比如 str()、int() 等,但是在開發(fā)時(shí),也需要經(jīng)常用到自定義函數(shù)。
在 Python 中使用 def 關(guān)鍵字定義一個(gè)函數(shù)。

def 函數(shù)名(參數(shù)):
   實(shí)現(xiàn)函數(shù)功能的代碼

如果需要返回值,則需要使用 return 進(jìn)行返回。

def data_transform():
    # 具體的實(shí)現(xiàn)邏輯
    return True

2.6 模塊導(dǎo)入

要使用模塊,就需要安裝和導(dǎo)入模塊。模塊的兩種導(dǎo)入方法:import 語句導(dǎo)入法和 from語句導(dǎo)入法。

  • import 語法會導(dǎo)入模塊內(nèi)所有方法,一般如果用包的方法較多可以選擇;
  • from 模塊名 import 函數(shù)名:導(dǎo)入某塊中某個(gè)函數(shù),
import math  # 導(dǎo)入math模塊
import turtle  # 導(dǎo)入turtle模塊

from math import sqrt  # 導(dǎo)入math模塊中的單個(gè)函數(shù)
from turtle import forward, backward, right, left  # 導(dǎo)入turtle模塊中的多個(gè)函數(shù)

模塊的安裝使用 pip install 指令:

pip install "SomeProject"

3. 網(wǎng)絡(luò)請求與數(shù)據(jù)解析

爬蟲肯定需要了解基礎(chǔ)的網(wǎng)絡(luò)請求和基礎(chǔ)的 HTML 知識,能夠認(rèn)識基礎(chǔ)的 HTML 標(biāo)簽。

3.1 requests 包

requests 包可以模擬瀏覽器發(fā)起 HTTP 或 HTTPS 協(xié)議的網(wǎng)絡(luò)請求,從而獲取網(wǎng)頁源代碼。
使用也比較簡單,先安裝模塊:pip3 install requests.
get 請求
比如抓取百度首頁的信息。

import requests
response = requests.get(url='https://www.baidu.com')
print(response.text)

輸出如下:
全網(wǎng)最詳細(xì)??!Python 爬蟲快速入門,python,爬蟲,數(shù)據(jù)庫
**post **請求

# 測試請求地址
req_url = "https://juejin.org/post"

# 表單數(shù)據(jù)
formdata = {
    'username': 'admin',
    'password': 'a123456',
}

# 添加請求頭
req_header = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
}
# 發(fā)起請求
response = requests.post(
    req_url,
    data=formdata,
    headers=req_header
)

print(response.text)

通過 requests 模塊發(fā)送網(wǎng)絡(luò)請求,非常簡單,容易上手。

3.2 BeautifulSoup 數(shù)據(jù)解析

BeautifulSoup 模塊是一個(gè) HTML/XML 解析器,主要用于解析和提取 HTML/XML 文檔中的數(shù)據(jù)。該模塊不僅支持 Python 標(biāo)準(zhǔn)庫中的 HTML 解析器 lxml,而且支持許多功能強(qiáng)大的第三方解析器。
在使用前先通過 pip 指令安裝模塊:pip install beautifulsoup4 。

3.2.1 簡單使用

以請求百度首頁為例。

if __name__ == '__main__':
    url = "https://www.baidu.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    print(soup.prettify())

打印輸出以下信息:

<!DOCTYPE html>
<!--STATUS OK-->
<html>
 <head>
  <meta content="text/html;charset=utf-8" http-equiv="content-type"/>
  <meta content="IE=Edge" http-equiv="X-UA-Compatible"/>
  <meta content="always" name="referrer"/>
  <link  rel="stylesheet" type="text/css"/>
  <title>
   ????o|??€???????? ?°±??¥é?“
  </title>
 </head>
 <body link="#0000cc">
  <div id="wrapper">
   <div id="head">
    <div class="head_wrapper">
     <div class="s_form">
      <div class="s_form_wrapper">
       <div id="lg">
        <img height="129" hidefocus="true" src="http://www.baidu.com/img/bd_logo1.png" width="270"/>
       </div>
       <form action="http://www.baidu.com/s" class="fm" id="form" name="f">
        <input name="bdorz_come" type="hidden" value="1"/>
        <input name="ie" type="hidden" value="utf-8"/>
        <input name="f" type="hidden" value="8"/>
        <input name="rsv_bp" type="hidden" value="1"/>
        <input name="rsv_idx" type="hidden" value="1"/>
        <input name="tn" type="hidden" value="baidu"/>
        <span class="bg s_ipt_wr">
         <input autocomplete="off" autofocus="autofocus" class="s_ipt" id="kw" maxlength="255" name="wd" value=""/>
        </span>
        <span class="bg s_btn_wr">
         <input autofocus="" class="bg s_btn" id="su" type="submit" value="????o|??€???"/>
        </span>
       </form>
      </div>
     </div>
     ...
    </div>
   </div>
  </div>
 </body>
</html>


通過 BeautifulSoup 庫可以將請求的網(wǎng)址信息按照標(biāo)簽進(jìn)行轉(zhuǎn)換展示。下面學(xué)習(xí) BeautifulSoup 提供的標(biāo)簽操作方法。

3.2.2 查找標(biāo)簽

依照上一節(jié)中的百度首頁為例,下面分別介紹 BeautifulSoup 中常用的方法。

查找指定標(biāo)簽名

在網(wǎng)頁源碼中,存在很多類型的標(biāo)簽。通過標(biāo)簽名進(jìn)行定位只能返回其中的第一個(gè)標(biāo)簽。
比如我們查找定位 標(biāo)簽。

if __name__ == '__main__':
    url = "https://www.baidu.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    print(soup.input)

輸出結(jié)果:

<input name="bdorz_come" type="hidden" value="1"/>

查找指定屬性的標(biāo)簽

標(biāo)簽的屬性有:name、class、id 等,我們使用 find 或 find_all 方法查找標(biāo)簽對應(yīng)的所有屬性。

import requests
from bs4 import BeautifulSoup

if __name__ == '__main__':
    url = "https://www.baidu.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    # print(soup.prettify())
    # 查找 class 屬性為 bg s_ipt_wr 的標(biāo)簽
    bg_tags = soup.find_all(class_='bg s_ipt_wr')
    for tag in bg_tags:
        print(tag)  # 輸出 <span class="bg s_ipt_wr"><input autocomplete="off" autofocus="autofocus" class="s_ipt" id="kw" maxlength="255" name="wd" value=""/></span>

    # 查找 name = rsv_idx
    idx = soup.find(attrs={'name': 'rsv_idx'})
    print(idx)  # 輸出 <input name="rsv_idx" type="hidden" value="1"/>


在上面的示例中,我們通過 find_all 方法查找所有 class_= 'bg s_ipt_wr'的標(biāo)簽。因?yàn)?class 這個(gè)單詞本身是 Python 的保留字,所以 BeautifulSoup 模塊中的 class 屬性在末尾添加了下劃線來進(jìn)行區(qū)分。其他標(biāo)簽屬性,如 id 屬性,則沒有添加下劃線。

通過標(biāo)簽名+屬性查找

通過指定標(biāo)簽名 + 屬性值可以實(shí)現(xiàn)更準(zhǔn)確的查找。

if __name__ == '__main__':
    url = "https://www.baidu.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    # print(soup.prettify())
   
    # 查找 input 標(biāo)簽且屬性 name = rsv_idx
    idx = soup.find('input', attrs={'name': 'rsv_idx'})
    print(idx)  # 輸出 <input name="rsv_idx" type="hidden" value="1"/>

3.2.3 選擇標(biāo)簽

在上一小節(jié)中介紹了 find 方法用于查找標(biāo)簽,使用 select() 函數(shù)可以根據(jù)指定的選擇器返回所有符合條件的標(biāo)簽。常用的選擇器有 id 選擇器、class 選擇器、標(biāo)簽選擇器和層級選擇器。

1. 標(biāo)簽選擇器

根據(jù)指定的標(biāo)簽進(jìn)行篩選。在 find 中根據(jù)指定標(biāo)簽名查找時(shí)只會返回第一個(gè)匹配項(xiàng)。使用 select 標(biāo)簽返回所有。

if __name__ == '__main__':
    url = "https://www.baidu.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    # print(soup.prettify())

    input_tag = soup.select('input')
    print(input_tag)
    # 輸出 [<input name="bdorz_come" type="hidden" value="1"/>, <input name="ie" type="hidden" value="utf-8"/>]

在 select 中直接查找對應(yīng)的標(biāo)簽名,會輸出所有的標(biāo)簽。

2. id 選擇器

id 選擇器是根據(jù) id 值查找對應(yīng)的標(biāo)簽。格式 ‘#id值’

if __name__ == '__main__':
    url = "https://www.baidu.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    # print(soup.prettify())

    input_tag = soup.select('#kw')
    print(input_tag)
    # 輸出 [<input autocomplete="off" autofocus="autofocus" class="s_ipt" id="kw" maxlength="255" name="wd" value=""/>]

上面的示例中,查找 id 值為 kw 的標(biāo)簽。注意輸出是列表形式。

3. class 選擇器

class 選擇器根據(jù) class 屬性值查找對應(yīng)的標(biāo)簽,格式為 ‘.class屬性值’

if __name__ == '__main__':
    url = "https://www.baidu.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    # print(soup.prettify())

    input_tag = soup.select('.s_ipt')
    print(input_tag)
    # 輸出 [<input autocomplete="off" autofocus="autofocus" class="s_ipt" id="kw" maxlength="255" name="wd" value=""/>]

上面的示例中,查找 class 值為 s_ipt 的標(biāo)簽。注意輸出是列表形式。

4. 層級篩選器

在 HTML 中標(biāo)簽嵌套很常見,標(biāo)簽在不同的層級形成嵌套結(jié)構(gòu)。通過 標(biāo)簽>標(biāo)簽這種指向結(jié)構(gòu)來定位。

<div class="s_form_wrapper">
   <div id="lg">
    <img height="129" hidefocus="true" src="http://www.baidu.com/img/bd_logo1.png" width="270"/>
   </div>
   <form action="http://www.baidu.com/s" class="fm" id="form" name="f">
    <input name="bdorz_come" type="hidden" value="1"/>
    <input name="ie" type="hidden" value="utf-8"/>
    <input name="f" type="hidden" value="8"/>
    <input name="rsv_bp" type="hidden" value="1"/>
    <input name="rsv_idx" type="hidden" value="1"/>
    <input name="tn" type="hidden" value="baidu"/>
    <span class="bg s_ipt_wr">
     <input autocomplete="off" autofocus="autofocus" class="s_ipt" id="kw" maxlength="255" name="wd" value=""/>
    </span>
    <span class="bg s_btn_wr">
     <input autofocus="" class="bg s_btn" id="su" type="submit" value="????o|??€???"/>
    </span>
   </form>
</div>

使用上面的示例數(shù)據(jù),我們來驗(yàn)證。

if __name__ == '__main__':
    url = "https://www.baidu.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    # 查找所有 <div> 標(biāo)簽下 <div> 標(biāo)簽的 id 屬性值為 lg 的標(biāo)簽
    div_tag = soup.select('div>div>#lg')
    # 輸出結(jié)果 [<div id="lg"> <img height="129" hidefocus="true" src="http://www.baidu.com/img/bd_logo1.png" width="270"/> </div>]
    print(div_tag)

    # 查找 <form> 標(biāo)簽下所有的 input 標(biāo)簽
    input_tag = soup.select('form>input')
    print(input_tag)
    # 輸出結(jié)果 [<input name="bdorz_come" type="hidden" value="1"/>, <input name="ie" type="hidden" value="utf-8"/>, <input name="f" type="hidden" value="8"/>, <input name="rsv_bp" type="hidden" value="1"/>, <input name="rsv_idx" type="hidden" value="1"/>, <input name="tn" type="hidden" value="baidu"/>]

    form_tag = soup.select('div>form span')
    print(form_tag)

“>” 在層級選擇器中表示向下找一個(gè)層級,中間不能有其他層級。如果中間有空格表示中間可以有多個(gè)層級。

3.2.4 提取內(nèi)容和屬性

找到標(biāo)簽后,我們需要讀取標(biāo)簽對應(yīng)的內(nèi)容或者屬性。

提取標(biāo)簽內(nèi)容

獲取標(biāo)簽后我們需要查找標(biāo)簽中的內(nèi)容,可以利用 string 或 text 來提取。string 屬性返回的是指定標(biāo)簽的直系文本,即直接存在于該標(biāo)簽中的文本,而不是存在于該標(biāo)簽下的其他標(biāo)簽中的文本。text 屬性返回的則是指定標(biāo)簽下的所有文本。

if __name__ == '__main__':
    url = "https://www.baidu.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    # 查找所有 <div> 標(biāo)簽下 <div> 標(biāo)簽的 id 屬性值為 lg 的標(biāo)簽
    div_tag = soup.select('div>a')
    print(div_tag[0].string)
    print(div_tag[0].text)

從標(biāo)簽中提取屬性

對于找到的標(biāo)簽,提取屬性直接使用 tag['屬性表']即可。

if __name__ == '__main__':
    url = "https://www.baidu.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    div_tag = soup.select('form>input') # [<input name="bdorz_come" type="hidden" value="1"/>]
    print(div_tag[0]['name']) # bdorz_come 
    print(div_tag[0]['type']) # hidden

至此,我們基本完成了對 beautifulSoup 庫的學(xué)習(xí)。

4. 正則表達(dá)式

正則表達(dá)式是一種用于匹配和操作文本的強(qiáng)大工具,它是由一系列字符和特殊字符組成的模式,用于描述要匹配的文本模式。正則表達(dá)對網(wǎng)頁源代碼的字符串進(jìn)行匹配,從而提取出需要的數(shù)據(jù)。

4.1 普通字符

普通字符包括沒有顯式指定為元字符的所有可打印和不可打印字符。這包括所有大寫和小寫字母、所有數(shù)字、所有標(biāo)點(diǎn)符號和一些其他符號。

符號 描述
\W 匹配任何非單詞字符。等價(jià)于“[^A-Za-z0-9_]”。
\w 匹配包括下劃線的任何單詞字符。等價(jià)于“[A-Za-z0-9_]”。
\s 匹配任何空白字符,包括空格、制表符、換頁符等等。等價(jià)于[ \f\n\r\t\v]。
\S 匹配任何非空白字符。等價(jià)于[^ \f\n\r\t\v]。
\d 匹配一個(gè)數(shù)字字符。等價(jià)于[0-9]。
\D 匹配一個(gè)非數(shù)字字符。等價(jià)于[^0-9]。

示例代碼:

if __name__ == '__main__':
    str = 'kdd199ok98 a123 343'
    print(re.findall('\W', str))    # 匹配任何非單詞字符,[' ', ' ']
    print(re.findall('\w', str))    # 匹配任何單詞字符,['k', 'd', 'd', '1', '9', '9', 'o', 'k', '9', '8', 'a', '1', '2', '3', '3', '4', '3']
    print(re.findall('\S', str))    # 匹配任何非空白字符,['k', 'd', 'd', '1', '9', '9', 'o', 'k', '9', '8', 'a', '1', '2', '3', '3', '4', '3']
    print(re.findall('\s', str))    # 匹配空白字符,[' ', ' ']
    print(re.findall('\D', str))    # 匹配非數(shù)字,['k', 'd', 'd', 'o', 'k', ' ', 'a', ' ']
    print(re.findall('\d', str))    # 匹配數(shù)字,['1', '9', '9', '9', '8', '1', '2', '3', '3', '4', '3']

4.2 元字符

元字符是正則表達(dá)式中有特殊含義的字符,可以設(shè)置字符的匹配模式。

符號 描述
$ 匹配輸入字符串的結(jié)尾位置。如果設(shè)置了 RegExp 對象的 Multiline 屬性,則 也匹配′n′或′r′。要匹配也匹配 ‘\\n’ 或 ‘\\r’。要匹配也匹配′n′或′r′。要匹配 字符本身,請使用 \$。
( ) 標(biāo)記一個(gè)子表達(dá)式的開始和結(jié)束位置。子表達(dá)式可以獲取供以后使用。要匹配這些字符,請使用 \( 和 \)。
* 匹配前面的子表達(dá)式零次或多次。要匹配 * 字符,請使用 \*。
+ 匹配前面的子表達(dá)式一次或多次。要匹配 + 字符,請使用 \+。
. 匹配除換行符 \n 之外的任何單字符。要匹配 . ,請使用 \. 。
[ 標(biāo)記一個(gè)中括號表達(dá)式的開始。要匹配 [,請使用 \[。
? 匹配前面的子表達(dá)式零次或一次,或指明一個(gè)非貪婪限定符。要匹配 ? 字符,請使用 \?。
\ 將下一個(gè)字符標(biāo)記為或特殊字符、或原義字符、或向后引用、或八進(jìn)制轉(zhuǎn)義符。例如, ‘n’ 匹配字符 ‘n’。‘\n’ 匹配換行符。序列 ‘\\’ 匹配 “\”,而 ‘\(’ 則匹配 “(”。
匹配輸入字符串的開始位置,除非在方括號表達(dá)式中使用,當(dāng)該符號在方括號表達(dá)式中使用時(shí),表示不接受該方括號表達(dá)式中的字符集合。要匹配 ^ 字符本身,請使用 \^。
{n} n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次。
{n,} n 是一個(gè)非負(fù)整數(shù)。至少匹配n 次。
{n,m} m 和 n 均為非負(fù)整數(shù),其中 n <= m。最少匹配 n 次且最多匹配 m 次。

示例代碼:

if __name__ == '__main__':
    str = 'akdd1d199ok98 d123 3438'
    print(re.findall('8$', str))    # 匹配以 8 結(jié)尾的字符,['8']
    print(re.findall('3$', str))    # 匹配以 3 結(jié)尾的字符,[]
    print(re.findall('^a', str))    # 匹配以 a 開頭的字符,['a']
    print(re.findall('^d', str))    # 匹配以 d 開頭的字符,[]
    print(re.findall('(d1)?', str))    # 匹配 d1 零次或一次的字符,['', '', 'd1', '', '', '', '', '', '', '', 'd1', '', '', '', '', '', '', '', '']
    print(re.findall('(d1)+', str))    # 匹配 d1 一次或多次的字符,['d1', 'd1']
    print(re.findall('(d1)*', str))    # 匹配 d1 零次或多次的字符,['', '', 'd1', '', '', '', '', '', '', '', 'd1', '', '', '', '', '', '', '', '']
    print(re.findall('(d1){2,}', str))    # 匹配 d1 最少 2 次的字符,['d1']
    print(re.findall('(d1){1,2}', str))    # 匹配 d1 最少 1 次,最多 2 次的字符,['d1', 'd1']

    print(re.findall('(d.d)', str))    # 匹配 (d.d) 的字符,['d1d']
    print(re.findall('(d?d)', str))    # 匹配 (d?d) 的字符,['dd', 'd', 'd']
    print(re.findall('[ad]', str))    # 匹配字符集合 [ad] 的字符,['a', 'd', 'd', 'd', 'd']
    print(re.findall('(ad)', str))    # 匹配表達(dá)式 ad ,[]

正在表達(dá)式基礎(chǔ),但是想靈活運(yùn)用起來還需要多加練習(xí),太靈活可以組裝很多模式。

5. Selenium 的基本使用

通過 requests 模塊可以實(shí)現(xiàn)對一些靜態(tài)網(wǎng)頁的請求,對于一些動態(tài)與瀏覽器需要交互的地址則不能滿足。而 Selenium 模塊則能控制瀏覽器發(fā)送請求,并和獲取到的網(wǎng)頁中的元素進(jìn)行交互,因此,只要是瀏覽器發(fā)送請求能得到的數(shù)據(jù),Selenium 模塊也能直接得到。

5.1 環(huán)境安裝

使用 Selenium 模塊需要先下載和安裝瀏覽器驅(qū)動程序,然后在編程時(shí)通過 Selenium 模塊實(shí)例化一個(gè)瀏覽器對象,再通過瀏覽器對象訪問網(wǎng)頁和操作網(wǎng)頁元素。

5.1.1 安裝 Selenium 模塊

安裝比較簡單,直接使用 pip install selenium安裝就行了。比較重要的是安裝瀏覽器驅(qū)動程序。

2.1.2 安裝瀏覽器驅(qū)動程序

在網(wǎng)址 chromedriver.storage.googleapis.com/index.html 中可以下載對應(yīng)版本的瀏覽器驅(qū)動程序。
查看自己瀏覽器版本,在瀏覽器中輸入:chrome://version/
全網(wǎng)最詳細(xì)!!Python 爬蟲快速入門,python,爬蟲,數(shù)據(jù)庫
選擇對應(yīng)的電腦端系統(tǒng),比如我是 Mac 系統(tǒng),下載對應(yīng)的即可。解壓之后放到環(huán)境路徑或者項(xiàng)目中都行,只要在使用時(shí)指定對應(yīng)的環(huán)境即可。

5.1.3 打開頁面

這里已打開百度網(wǎng)站為例。我將 webdriver 放到項(xiàng)目路徑中。

from selenium import webdriver

if __name__ == '__main__':
    browser = webdriver.Chrome(executable_path='./chromedriver_mac64/chromedriver')
    browser.get('https://www.baidu.com')

5.2 常見 API

5.2.1 瀏覽器操作

webdriver 返回的 browser 對象中,提供了豐富的 API 用于操作瀏覽器。

browser.maximize_window() 最大化瀏覽器
browser.current_url 當(dāng)前網(wǎng)頁 url
browser.get_cookie() 當(dāng)前網(wǎng)頁用到的 cookie 信息
browser.name 當(dāng)前瀏覽器驅(qū)動名稱
browser.title 當(dāng)前網(wǎng)頁標(biāo)題
browser.page_source 獲取當(dāng)前網(wǎng)頁源代碼
browser.current_window_handle 獲取當(dāng)前網(wǎng)頁的窗口
browser.refresh() 刷新當(dāng)前網(wǎng)頁
browser.quit() 關(guān)閉瀏覽器
browser.close() 關(guān)閉當(dāng)前網(wǎng)頁
browser.back() 返回上一頁
5.2.2 查找標(biāo)簽

完成了網(wǎng)頁的訪問后,如果需要模擬用戶操作網(wǎng)頁元素,則需要先通過標(biāo)簽來定位網(wǎng)頁元素。
find_element(self, by=By.ID, value=None)? 查找元素,其中 By.ID 是枚舉類型:

  • ID:通過元素 id 定位;
  • XPATH:通過 xpath 表達(dá)式定位;
  • LINK_TEXT:通過完整超鏈接定位;
  • PARTIAL_LINK_TEXT:通過模糊超鏈接定位;
  • NAME:通過元素 name 定位;
  • TAG_NAME:通過標(biāo)簽定位;
  • CLASS_NAME:通過 class 進(jìn)行定位;
  • CSS_SELECTOR:通過 css 選擇器進(jìn)行定位。

使用示例:

from selenium import webdriver
from selenium.webdriver.common.by import By

if __name__ == '__main__':
    browser = webdriver.Chrome(executable_path='./chromedriver_mac64/chromedriver')
    browser.get('https://www.baidu.com')
    tag1 = browser.find_element(by=By.ID, value='form')
    print(tag1.get_attribute("class"))

找到標(biāo)簽后,就可以通過 get_attribute 方法獲取對應(yīng)的屬性值。

5.3 模擬鼠標(biāo)操作

常用的鼠標(biāo)操作有單擊、雙擊、右擊、長按、拖動、移動等,模擬這些操作需要用到 Selenium 模塊中的ActionChains 類。它提供了以下方法:

  • click():模擬點(diǎn)擊;
  • double_click():模擬雙擊;
  • click_and_hold():鼠標(biāo)長按;
  • click_and_hold():釋放鼠標(biāo)按;

下面以打開百度首頁的圖片鏈接為例:

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

if __name__ == '__main__':
    browser = webdriver.Chrome(executable_path='./chromedriver_mac64/chromedriver')
    browser.get('https://www.baidu.com')
    # 找到圖片鏈接
    alink = browser.find_element(by=By.LINK_TEXT, value='圖片')
    print(alink.get_attribute("href"))
    actions = ActionChains(browser)
    actions.click(alink).perform()

運(yùn)行成功后,會首先打開百度首頁,然后跳轉(zhuǎn)到百度圖片頁面。
全網(wǎng)最詳細(xì)??!Python 爬蟲快速入門,python,爬蟲,數(shù)據(jù)庫

6. 總結(jié)

以上就是今天的全部內(nèi)容分享,覺得有用的話歡迎點(diǎn)贊收藏哦!

Python經(jīng)驗(yàn)分享

學(xué)好 Python 不論是用于就業(yè)還是做副業(yè)賺錢都不錯(cuò),而且學(xué)好Python還能契合未來發(fā)展趨勢——人工智能、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等。
小編是一名Python開發(fā)工程師,自己整理了一套最新的Python系統(tǒng)學(xué)習(xí)教程,包括從基礎(chǔ)的python腳本到web開發(fā)、爬蟲、數(shù)據(jù)分析、數(shù)據(jù)可視化、機(jī)器學(xué)習(xí)等。如果你也喜歡編程,想通過學(xué)習(xí)Python轉(zhuǎn)行、做副業(yè)或者提升工作效率,這份【最新全套Python學(xué)習(xí)資料】 一定對你有用!

小編為對Python感興趣的小伙伴準(zhǔn)備了以下籽料 !

對于0基礎(chǔ)小白入門:

如果你是零基礎(chǔ)小白,想快速入門Python是可以考慮培訓(xùn)的!

  • 學(xué)習(xí)時(shí)間相對較短,學(xué)習(xí)內(nèi)容更全面更集中
  • 可以找到適合自己的學(xué)習(xí)方案

包括:Python激活碼+安裝包、Python web開發(fā),Python爬蟲,Python數(shù)據(jù)分析,人工智能、機(jī)器學(xué)習(xí)、Python量化交易等學(xué)習(xí)教程。帶你從零基礎(chǔ)系統(tǒng)性的學(xué)好Python!

一、Python所有方向的學(xué)習(xí)路線

Python所有方向路線就是把Python常用的技術(shù)點(diǎn)做整理,形成各個(gè)領(lǐng)域的知識點(diǎn)匯總,它的用處就在于,你可以按照上面的知識點(diǎn)去找對應(yīng)的學(xué)習(xí)資源,保證自己學(xué)得較為全面。
全網(wǎng)最詳細(xì)!!Python 爬蟲快速入門,python,爬蟲,數(shù)據(jù)庫

二、學(xué)習(xí)軟件

工欲善其事必先利其器。學(xué)習(xí)Python常用的開發(fā)軟件都在這里了,給大家節(jié)省了很多時(shí)間。

全網(wǎng)最詳細(xì)!!Python 爬蟲快速入門,python,爬蟲,數(shù)據(jù)庫

三、入門學(xué)習(xí)視頻

我們在看視頻學(xué)習(xí)的時(shí)候,不能光動眼動腦不動手,比較科學(xué)的學(xué)習(xí)方法是在理解之后運(yùn)用它們,這時(shí)候練手項(xiàng)目就很適合了。

全網(wǎng)最詳細(xì)??!Python 爬蟲快速入門,python,爬蟲,數(shù)據(jù)庫

四、實(shí)戰(zhàn)案例

光學(xué)理論是沒用的,要學(xué)會跟著一起敲,要動手實(shí)操,才能將自己的所學(xué)運(yùn)用到實(shí)際當(dāng)中去,這時(shí)候可以搞點(diǎn)實(shí)戰(zhàn)案例來學(xué)習(xí)。

全網(wǎng)最詳細(xì)??!Python 爬蟲快速入門,python,爬蟲,數(shù)據(jù)庫

五、面試資料

我們學(xué)習(xí)Python必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有阿里大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。

全網(wǎng)最詳細(xì)??!Python 爬蟲快速入門,python,爬蟲,數(shù)據(jù)庫
全網(wǎng)最詳細(xì)!!Python 爬蟲快速入門,python,爬蟲,數(shù)據(jù)庫

最新全套【Python入門到進(jìn)階資料 & 實(shí)戰(zhàn)源碼 &安裝工具】(安全鏈接,放心點(diǎn)擊)

我已經(jīng)上傳至CSDN官方,如果需要可以掃描下方官方二維碼免費(fèi)獲取【保證100%免費(fèi)】

*今天的分享就到這里,喜歡且對你有所幫助的話,記得點(diǎn)贊關(guān)注哦~下回見 !文章來源地址http://www.zghlxwxcb.cn/news/detail-815256.html

到了這里,關(guān)于全網(wǎng)最詳細(xì)!!Python 爬蟲快速入門的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包