Python爬蟲庫xPath, BeautifulSoup, re, selenium的詳細用法

2021-12-29 今日在學

收錄於話題 #Python學習之路 10個

項目代碼展示部分代碼項目部署方法, 已發GitHub, 項目地址github地址[1]使用技術正則匹配有幾種正則匹配的方法:match, search, compile, findall, finditerre.match(a, b, c)三個參數: 匹配的規則, 要匹配的字符串, 匹配方式它是從字符串的第一個位置進行匹配如果滿足使用.span()方法可以返回它所在的索引位置, 如果不滿足則返回None返回結果.groups()返回一個包含所有小組的字符串的元組, 使用group(num)方法可以返回一個包含對應值的元組(從1開始)re.search(a, b, c)獲取元組方法也相同, 唯一的不同點就是, search不是從一開始進行匹配, 而是如果字符串中包含所要匹配的內容, 則返回第一個匹配成功的re.sub(a, b, c, d, e)d匹配後替換的最大次數, 默認是0表示全部匹配替換re.compile(a, b)用來編譯正則表達式, 供match和search這兩個函數使用如果使用的是match方法 在獲取匹配的字符時使用group方法獲取參數可以省略不寫也可以寫0group方法參數的數值與你所寫的正則表達式元組數有關start, end, span方法都是返回匹配字符在原字符串中所在的索引位置findall(a, b, c, d)參數分別表示: 正則表達式, 匹配的字符串, 指定匹配的起始位置, 結束位置返回滿足條件的所有子串, 列表的形式, 如不則返回空列表finditer(a, b, c)參數分別為: 匹配規則, 匹配的字符串, 匹配模式和findall方法類似, 返回值使用迭代器方式返回使用for in方法re.split(a, b, c, d)按照匹配規則將匹配的字符串進行分隔以列表的形式返回參數分別為: 匹配規則, 匹配字符, 切割次數默認為0, 不限制次數, 匹配模式正則表達式修飾符re.U 根據Unicode字符集解析字符. 這個標誌影響 \w, \W, \b, \B.re.X 該標誌通過給予你更靈活的格式以便你將正則表達式寫得更易於理解.

【Python正則表達式詳解 (超詳細, 看完必會!)[2]】

xPath方法可以對本地的html文件進行解析也可以直接對html字符串進行解析Xpath常用的規則本地展示以下代碼中用到該實例
# coding= utf-8
from lxml import etree
html = etree.parse('./index.html',etree.HTMLParser())
print(etree.tostring(html))

# coding= utf-8
from lxml import etree
fp = open('./index.html', 'rb')
html = fp.read().decode('utf-8')  
selector = etree.HTML(html)   #etree.HTML(源碼) 識別為可被xpath解析的對象
print(selector)

文本獲取兩種方法 /text() 和 //text(), 區別第一種直接獲取文本, 第二種要獲取換行時產生的特殊字符獲取屬性中包含多個值的情況 屬性多值匹配 contains()方法多屬性匹配, 使用and運算符 和contains方法搭配使用xPath運算符按序選擇xPath內置了100多種函數方法, 具體參考【xPath函數[3]】按序節點軸選擇獲取當前節點所有子元素的a節點的href屬性值 child::a/@href獲取當前節點的指定元素的屬性值 attribute:: 屬性名獲取當前節點 的所有屬性的屬性值 attribute::*獲取當前節點所有子節點 child::node()獲取當前元素所有文本子節點 child::text()獲取當前元素的所有父輩為li元素的節點(包括當前元素) ancestor-or-self:: 元素

xPath軸[4]xPath避坑指南[5]

xPath軸演示代碼
# coding= utf-8
from lxml import etree
# fp = open('./index.html', 'rb')
# html = fp.read().decode('utf-8')   #.decode('gbk')
# selector = etree.HTML(html)   #etree.HTML(源碼) 識別為可被xpath解析的對象
# print(selector)

html = etree.parse('./index.html',etree.HTMLParser())
# print(etree.tostring(html).decode('utf-8'))

all_node = html.xpath('//*')  # 所有節點的獲取 //*
part_node = html.xpath('//li')  # 部分節點 格式://節點名
child_node = html.xpath('//li/a')  # 匹配子節點
parent_node = html.xpath('//a[@href="//mr90.top"]/../@class')  # 獲取父節點屬性值的方法 ../@屬性名
attrs_node = html.xpath('//a[contains(@class,"a")]/text()')   # 獲取屬性中包含多個值的情況 屬性多值匹配 contains()方法
# 按序獲取
first_node = html.xpath('//li[1]/a/text()')  # 獲取第一個
last_node = html.xpath('//li[last()]//text()')   # 獲取最後一個節點
front_node = html.xpath('//li[position()<3]//text()')    # 獲取前兩個節點
end_ndoe = html.xpath('//li[last()-2]//text()')   # 獲取到數第三個節點

# 軸節點
child_node_z = html.xpath('//li[position()<2]/child::a/@href')  # 獲取當前節點所有子元素的a節點的href屬性值
attribute_node = html.xpath('//li[2]//attribute::lang')  # 獲取當前節點的指定元素的屬性值
all_child_node = html.xpath('//ul/li[last()-1]//child::*')  # 獲取當前節點的所有的文本節點
all_attrs_node = html.xpath('//li[1]/a/attribute::*')  # 獲取當前節點 的所有屬性的屬性值
all_child_text_node = html.xpath('//li[1]//child::text()')  # 獲取當前節點所有文本子節點
all_child_node_node = html.xpath('//li[1]/a/child::node()')  # 獲取當前節點所有子元素
ancestor_self = html.xpath('//a[@title="1"]/../ancestor-or-self::li') # 獲取當前元素的所有父輩為li元素的節點(包括當前元素)
print(ancestor_self)

Beautifulsoup4使用Beautiful Soup自動將輸入文檔轉換為Unicode編碼, 輸出文檔轉換為utf-8編碼使用前安裝 pip install beautifulsoup4引入from bs4 import Beautifulsoup4獲取內容

## 獲取標題對象

print(soup.title)  # <title>xPath方法</title>
# 獲取標題內容
print(soup.title.string)  # 返回迭代器
print(soup.title.text)
print(soup.title.get_text())
print(soup.find('title').get_text())

# print(soup.title.parent)   # 返回父節點包括父節點中的內容
print(soup.li.child)  # Node
print(soup.li.children)  # 返回一個迭代器

獲取第一個li標籤
print(soup.li.get_text())  # 匹配到第一個,返回所有節點的文本信息
print(soup.find('li').text)
# 獲取ul的子標籤們   (空行也看成了一個children)
print(soup.ul.children)
for index, item in enumerate(soup.ul.children):
    print(index, item)

獲取元素的屬性使用元素.attrs['屬性名']的方法返回的時一個列表如果使用兩次 soup.元素 第一次獲取的是匹配到的第一個元素, 第二次是匹配到的第二個元素獲取多個元素find_all獲取多個元素, 可以加上limit來達到限制個數的問題,  recursive = True 尋找子孫 ; recursive = False只找子多層級查找 find_all返回的是一個列表 可以遍歷該列表再次使用find方法或者find_all方法 進行元素的獲取通過指定的屬性, 獲取對象id和class選擇器, class比較特殊, 因為是關鍵字 在使用class時改成class_
print(soup.find(id='a'))
print(soup.find('a', id='a'))
print(soup.find_all('a', id='a'))  # 可以使用下標查詢

# class是關鍵字 要這麼寫class_

print('class1', soup.find_all('a', class_='a'))
print('class2', soup.find_all('a', attrs={'class': 'item'}))  # 更通用
print('class3', soup.find_all('a', attrs={'class': 'item', 'id': 'a'}))  # 多條件

使用函數作為參數, 返回元素
def judgeTilte1(t):
    if t == 'a':
        return True

print(soup.find_all(class_=judgeTilte1))

# 判斷長度
import re  # 正則表達式
reg = re.compile("item")
def judgeTilte2(t):
    # 返回長度為5,且包含'item'的t參數
    return len(str(t)) == 5 and bool(re.search(reg, t))
print(soup.find_all(class_=judgeTilte2))

可以使用css選擇器可以通過標籤名查找, 屬性查找, 標籤+類名+id, 組合查找

Python中BeautifulSoup庫的用法[6]python beautiful soup庫的超詳細用法[7]python 爬蟲 提取文本之BeautifulSoup詳細用法[8]

參考資料[1]

github地址: https://github.com/Rr210/hot_search

[2]

Python正則表達式詳解 (超詳細, 看完必會!): https://blog.csdn.net/weixin_43347550/article/details/105158003

[3]

xPath函數: http://www.w3school.com.cn/xpath/xpath_functions.asp

[4]

xPath軸: https://www.w3school.com.cn/xpath/xpath_axes.asp

[5]

xPath避坑指南: https://blog.csdn.net/Ryan_lee9410/article/details/107144213

[6]

Python中BeautifulSoup庫的用法: https://blog.csdn.net/qq_21933615/article/details/81171951

[7]

python beautiful soup庫的超詳細用法: https://blog.csdn.net/love666666shen/article/details/77512353

[8]

python 爬蟲 提取文本之BeautifulSoup詳細用法: https://blog.csdn.net/IT_arookie/article/details/82824620

這是一種鼓勵,你懂的!

相關焦點

  • Python爬蟲庫-Beautiful Soup的使用
    博主使用的是Mac系統,直接通過命令安裝庫:sudo easy_install beautifulsoup4安裝完成後,嘗試包含庫運行:from bs4 import BeautifulSoup若沒有報錯,則說明庫已正常安裝完成。
  • Python爬蟲系列:BeautifulSoup庫詳解
    -《德米安 彷徨少年時》之前了解過Requests庫的用法,在Python爬蟲中,用到BeautifulSoup4庫的技術路線為Requests庫+BeautifulSoup4庫+re庫,這裡小編準備先聊聊Beautiful Soup4庫。
  • python爬蟲之BeautifulSoup
    Beautiful Soup已成為和lxml、html6lib一樣出色的python解釋器,為用戶靈活地提供不同的解析策略或強勁的速度。ps=soup.find_all("p")for p in ps:print p.get('class') #得到p標籤下的class屬性    - 傳入正則表達式:soup.find_all(re.compile(r'^b')查找以b開頭的所有標籤,這裡的body和b標籤都會被查到    - 傳入類列表:如果傳入列表參數,
  • Python 爬蟲基礎教程——BeautifulSoup抓取入門
    簡單來說Beautiful Soup是python的一個庫,是一個可以從網頁抓取數據的利器。官方文檔:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/BeautifulSoup安裝pip install beautifulsoup4或pip install beautifulsoup4-i http://pypi.douban.com/simple/
  • BeautifulSoup 詳細知識(一)
    beautifulsoup4Beautiful Soup提供一些簡單的、python
  • python爬蟲常用庫之BeautifulSoup詳解
    因為是第三方庫所以我們需要下載,在命令行敲下以下代碼進行下載pip install beautifulsoup4安裝第三方解析庫如果不知道有什麼用請往下看1.相關解析庫的介紹這裡官方推薦解析庫為lxml,因為它的效率高。
  • BeautifulSoup 十分鐘快速上手指南
    $ pip install beautifulsoup4$ pip install lxml開始使用>>> from bs4 import BeautifulSoup>>> soup = BeautifulSoup("<html>data</html>", "html.parser")
  • selenium輔助學習
    下載對應的版本後,將chormedriver.exe放到對應python文檔的Scripts目錄下到此,環境配置已經完成,可以開始寫代碼了寫腳本先放實現簡單開課的代碼:from selenium import webdriverfrom
  • 【Python】Python爬蟲快速入門,BeautifulSoup基本使用及實踐
    網上有很多的學習資料,但是超詳細學習內容還是非官網莫屬,資料傳送門:英文官網:https://www.crummy.com/software/BeautifulSoup/bs4/doc/中文官網:https://www.crummy.com
  • Python筆記 | 使⽤ Beautiful Soup 解析數據
    Beautiful Soup的簡介簡單來說,Beautiful Soup是python的⼀個庫,最主要的功能是從⽹⻚抓取數據。官⽅解釋如下:Beautiful Soup提供⼀些簡單的、python式的函數⽤來處理導航、搜索、修改分析樹等功能。
  • Python爬蟲快速入門,BeautifulSoup基本使用及實踐
    網上有很多的學習資料,但是超詳細學習內容還是非官網莫屬,資料傳送門:英文官網:https://www.crummy.com/software/BeautifulSoup/bs4/doc/中文官網:https://www.crummy.com
  • Python爬蟲從入門到精通(3): BeautifulSoup用法總結及多線程爬蟲爬取糗事百科
    BeautifulSoup庫可以對HTML或XML文件解析,查找到一個或多個標籤元素(tag),並獲取每個標籤裡的文本和屬性,這為我們python爬蟲從html文本裡提取所需要的內容提供了很大的便利。一個BeautifulSoup很好的特性是它接受一個str或byte對象後會對編碼自動檢測,並把當前文檔編碼並轉換成Unicode編碼,這樣你就不用擔心亂碼問題了。
  • Python 爬蟲之 BeautifulSoup
    爬蟲之BeautifulSoup/如有好文章投稿,請點擊 → 這裡了解詳情簡介Beautiful Soup提供一些簡單的、python式的函數用來處理導航、搜索、修改分析樹等功能。Beautiful Soup已成為和lxml、html6lib一樣出色的python解釋器,為用戶靈活地提供不同的解析策略或強勁的速度。
  • python爬蟲系列二: Beautiful Soup庫學習筆記
    安裝:1.安裝beautiful soup4  即bs4          2.安裝lxmlBeautiful Soup對象beautiful soup對象:代表要解析的整個文檔樹,它支持遍歷文檔樹和搜索文檔樹中描述的大部分方法
  • Beautiful Soup的安裝和使用
    </p>"""from bs4 import BeautifulSoupsoup =BeautifulSoup(html_doc,'lxml')#lxml也是第三方庫print(soup.prettify())
  • HTML解析之BeautifulSoup
    官方文檔:https://beautifulsoup.readthedocs.io/zh_CN/latest/pip 安裝:pip install bs4或者pip install beautifulsoup4BeautifulSoup使用語法:
  • Python改變生活 | 利用Selenium實現網站自動籤到
    先導入selenium庫,這裡只需使用selenium中的webdriver模塊,運行from selenium import webdriver打開下載的瀏覽器驅動,設置隱式等待時input = wd.find_element_by_xpath('//*[@id="email"]')input.send_keys('kxpython@163.com')
  • Python3中BeautifulSoup的使用方法
    目前BeautifulSoup的最新版本是4.x版本,之前的版本已經停止開發了,推薦使用pip來安裝,安裝命令如下:pip3 install beautifulsoup4當然也可以從pypi下載whl文件安裝,連結如下:https://pypi.python.org/pypi/beautifulsoup4好,安裝完成之後可以驗證一下,寫一段
  • 使用Selenium和BeautifulSoup爬取職位發布數據
    https://anaconda.org/anaconda/beautifulsoup4https://anaconda.org/conda-forge/selenium驅動程序可以在此頁面的 「驅動程序」下找到。可以選擇要使用的瀏覽器,我使用的是名為「geckodriver」的Firefox。下載完成後,只需解壓縮並將可執行文件放入項目文件夾就可以了!