爬蟲之三種解析方式

2022-05-01 02:18:10 字數 3811 閱讀 4948

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 python

# -*- 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中的鏈結

爬取糗事百科指定頁面的糗圖,並將其儲存到指定資料夾中

1.pip install bs4

2.pip install lxml

如何例項化乙個beautifulsoup物件

網路載入:

1.例項化etree物件,且將原始碼載入到該物件中

2.使用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

**中使用xpath表示式進行資料解析:

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,重...