爬蟲之正則和xpath

2022-02-28 05:17:32 字數 4272 閱讀 5115

常用正規表示式回顧:

單字元:
. : 除換行以外所有字元

:[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(正規表示式, 替換內容, 字串)

爬取糗百資料

import re

import requests

from

urllib import request

import os#1

.檢查頁面資料是否為動態載入出來的#2

.獲取頁面原始碼資料

if not os.path.exists('

qiutu'):

os.mkdir(

'qiutu')

headers =

url = '

'page_text = requests.get(url=url,headers=headers).text#3

.解析img標籤的src屬性值

4.對url發請求

#5.持久化儲存

request.urlretrieve(url=img_url,filename=imgpath)

print(imgpath+'

')

xpath介紹

3.使用:

將html文件或者xml文件轉換成乙個etree物件,然後呼叫物件中的方法查詢指定的節點

1.本地檔案

本地檔案:tree =etree.parse(檔案路徑或者一段**)

tree.xpath(

"xpath表示式

")

from lxml import

etree

html = """

"""html =etree.html(html)

print(html) #

result =etree.tostring(html)

print(result.decode("

utf-8

")) #

補全了html和body標籤

2.網路資料

網路資料:tree =etree.html(網頁內容字串)

tree.xpath(

"xpath表示式

")

測試頁面資料

"

en">百里守約

class="

song

">

李清照王安石蘇軾

柳宗元"

" title="

趙匡胤" target="

_self

">

this

is span

宋朝是最強大的王朝,不是軍隊的強大,而是經濟很強大,國民都很有錢

""class="

du">總為浮雲能蔽日,長安不見使人愁

" alt="" />

class="

tang

">

屬性定位:
#找到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

58二手房資料

import requests

from

lxml import etree

#獲取頁面原始碼資料

url = '

'headers =

page_text = requests.get(url=url,headers=headers).text

#例項化etree物件且將頁面原始碼資料載入到該物件中

#對詳情頁發起請求,獲取頁面資料

detail_page_text = requests.get(url=detail_url,headers=headers).text

tree =etree.html(detail_page_text)

desc = tree.xpath('

//div[@class="general-item-wrap"]//text()')

desc = ''.join(desc).strip('

\n \b \t')

dic =

print(all_data_list)

Python之爬蟲 etree和XPath實戰

下面 是在 上找到的乙個例子,空閒的時候可以自己除錯。coding utf 8 爬蟲 創業邦 創業公司資訊爬取 網頁url 爬取頁面中的創業公司,融資階段,創業領域,成立時間和創業公司的鏈結資訊。使用到requests,json,codecs,lxml等庫 requests用於訪問頁面,獲取頁面的源...

爬蟲基礎之Xpath!

參見 參見div 1 獲取本頁面第乙個div div last 獲取本頁面最後乙個div div last 1 獲取倒數第二個div div 1 div last 獲取第乙個div和最後乙個div 從根節點擊取 從匹配選擇的當前節點擊擇文件中的節點,而不考慮它們的位置 div class title...

python 爬蟲之xpath用法

xpath全稱為xml path language一種小型的查詢語言,在爬蟲中,我們其實就是拿它來搜尋html文件,僅此而已。而網頁內容只有通過解析才能進行搜尋,所以使用xpath時,需要引入lxml庫,這個庫就是來解析網頁,協助xpath進行搜尋的。lxml庫的安裝,可以直接使用 pip3 ins...