1.實現標籤的定位
2.將標籤中的儲存的文字內容或者相關的屬性值進行提取
單字元:. : 除換行以外所有字元
:[aoe] [a-w] 匹配集合中任意乙個字元
\d :數字 [0-9]
\d : 非數字
\w :數字、字母、下劃線、中文
\w : 非\w
\s :所有的空白字元包,括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。
\s : 非空白
數量修飾:
* : 任意多次 >=0
+ : 至少1次 >=1
? : 可有可無 0次或者1次
:固定m次 hello
:至少m次
:m-n次
邊界:$ : 以某某結尾
^ : 以某某開頭
分組:(ab)
貪婪模式: .*
非貪婪(惰性)模式: .*?
re.i : 忽略大小寫
re.m :多行匹配
re.s :單行匹配
re.sub(正規表示式, 替換內容, 字串)
正則回顧
#!/usr/bin/env python1.pip install bs4# -*- coding:utf-8 -*-
import requests
import re
import os
if __name__ == "__main__":
url = ''
headers=
#指定起始也結束頁碼
page_start = int(input('enter start page:'))
page_end = int(input('enter end page:'))
#建立資料夾
if not os.path.exists('images'):
os.mkdir('images')
for page in range(page_start,page_end+1):
new_url = format(url % page)
response = requests.get(url=new_url,headers=headers)
#解析response中的鏈結
爬取糗事百科指定頁面的糗圖,並將其儲存到指定資料夾中
2.pip install lxml
如何例項化乙個beautifulsoup物件
網路載入:
1.例項化etree物件,且將原始碼載入到該物件中
2.使用xpath方法結合著xpath表示式進行標籤的定位和資料的提取
屬性定位:**中使用xpath表示式進行資料解析:#找到class屬性值為song的div標籤
//div[@class="song"]
層級&索引定位:
#找到class屬性值為tang的div的直系子標籤ul下的第二個子標籤li下的直系子標籤a
//div[@class="tang"]/ul/li[2]/a
邏輯運算:
#找到href屬性值為空且class屬性值為du的a標籤
//a[@href="" and @class="du"]
模糊匹配:
//div[contains(@class, "ng")]
//div[starts-with(@class, "ta")]
取文字:
# /表示獲取某個標籤下的文字內容
# //表示獲取某個標籤下的文字內容和所有子標籤下的文字內容
//div[@class="song"]/p[1]/text()
//div[@class="tang"]//text()
取屬性:
//div[@class="tang"]//li[2]/a/@href
2.導包:from lxml import etree
3.將html文件或者xml文件轉換成乙個etree物件,然後呼叫物件中的方法查詢指定的節點
2.1 本地檔案:tree = etree.parse(檔名)
tree.xpath("xpath表示式")
2.2 網路資料:tree = etree.html(網頁內容字串)
tree.xpath("xpath表示式")
安裝xpath外掛程式在瀏覽器中對xpath表示式進行驗證:可以在外掛程式中直接執行xpath表示式
import requests
from lxml import etree
from fake_useragent import useragent
import base64
import urllib.request
url = ''
ua = useragent(verify_ssl=false,use_cache_server=false).random
headers =
page_text = requests.get(url=url,headers=headers).text
#簡單觀察會發現每張載入都是通過jandan_load_img(this)這個js函式實現的。
#在該函式後面還有乙個class值為img-hash的標籤,裡面儲存的是一組hash值,該值就是加密後的img位址
#加密就是通過js函式實現的,所以分析js函式,獲知加密方式,然後進行解密。
#通過抓包工具抓取起始url的資料報,在資料報中全域性搜尋js函式名(jandan_load_img),然後分析該函式實現加密的方式。
#在該js函式中發現有乙個方法呼叫,該方法就是加密方式,對該方法進行搜尋
#搜尋到的方法中會發現base64和md5等字樣,md5是不可逆的所以優先考慮使用base64解密
#print(page_text)
tree = etree.html(page_text)
#在抓包工具的資料報響應物件對應的頁面中進行xpath的編寫,而不是在瀏覽器頁面中。
#獲取了加密的url資料
imgcode_list = tree.xpath('//span[@class="img-hash"]/text()')
imgurl_list =
for url in imgcode_list:
#base64.b64decode(url)為byte型別,需要轉成str
Python指令碼之三種執行方式
這種模式下,無需建立指令碼檔案,直接在 python直譯器的互動模式下編寫對應的 python 語句即可。1 開啟互動模式的方式 windows下 在開始選單找到 命令提示符 開啟,就進入到命令列模式 在命令列模式輸入 python 即可進入 python 的互動模式 linux 下 直接在終端輸入...
陣列之三種矩陣
矩陣的壓縮 對於某些特殊的矩陣來說,非零元素較少,大部分元素為0,採用某種演算法,將非零元素儲存在一位陣列裡以達到節省儲存空間的目的的過程,稱為矩陣的壓縮 矩陣的還原 將壓縮後的陣列還原成原始矩陣的過程 所謂對角矩陣 矩陣中的所有非零元素都集中在以主對角線為中心的帶狀區域中,即除了主對角線上和直接在...
android 解析xml的三種方式
xml 可拓展的標記語言,簡單的資料儲存語言 開始標籤與結束標籤匹配 區分大小寫 標籤android 解析xml的三種方式 dom 文件物件模型 sax 事件驅動的xmlapi class 繼承org.xml.sax.helpers.defaulthandler包下的defaulthandler,重...