Python獲取網頁資訊的四種方式

2021-09-05 01:20:23 字數 4702 閱讀 7231

2. find_all 和 find 函式獲取網頁資訊

3. css selector方法獲取網頁資訊

4. 正規表示式獲取網頁資訊

headers =

# 訪問網頁

r = requests.get(

'',headers = headers)

# 讀取網頁內容

r = r.text

# 將網頁內容解析為beautifulsoup能讀懂的方式

soup = beautifulsoup(r,

'html.parser'

)

# 列印網頁內容

print

(soup.prettify())

# 獲取『p』標籤的資訊

print

(soup.p)

# 檢視』p『標籤的型別

print

(type

(soup.p)

)# 獲取』p』標籤的名字

print

(soup.p.name)

# 獲取『p'標籤的屬性

print

(soup.p.attrs)

# 獲取』p『標籤的內容

print

(soup.p.string)

# 獲取』p『標籤的內容的型別

print

(type

(soup.p.string)

)# 獲取』p『標籤屬性的值

print

(soup.p[

'class'])

print

(soup.p.get(

'class'))

# 更改『p』標籤的屬性值

soup.p[

'class']=

'newclass'

# 檢視更改後的』p『屬性

print

(soup.p[

'class'])

# 檢視soup的型別

print

(type

(soup)

)# 檢視soup的名字

print

(soup.name)

# 刪除』p『的class

del soup.p[

'class'

]# 檢視刪除屬性後的』p『

print

(soup.p)

# 檢視』script『標籤內容

print

(soup.script.string)

# 檢視』script『標籤內容的型別

print

(type

(soup.script.string)

)

# 查詢 dd 標籤

print

(soup.dd)

# 檢視 dd 標籤的型別

print

(type

(soup.dd)

)# 查詢 dd 標籤的兒子

print

(soup.dd.children)

# 列印 dd 的兒子

# enumerate多用於在for迴圈中得到計數,利用它可以同時獲得索引和值,

# 即需要index和value值的時候可以使用enumerate

for i, child in

enumerate

(soup.dd.children)

:print

(i, child)

# 查詢 dd 標籤的所有後代

print

(soup.dd.descendants)

# 列印 dd 標籤的後代

for i, child in

enumerate

(soup.dd.descendants)

:print

(i, child)

# 查詢 dd 標籤的父母

print

(soup.dd.parent)

# 查詢 dd 標籤的祖先

print

(soup.dd.parents)

# 列印 dl 標籤的祖先

for i, parent in

enumerate

(soup.dd.parents)

:print

(i, parent)

# 查詢 dd 標籤下面的所有兄弟

print

(soup.dd.next_siblings)

# 查詢 dd 標籤前面的所有兄弟

print

(soup.dd.previous_siblings)

# 查詢 dd 標籤下面的乙個兄弟

print

(soup.dd.next_sibling)

# 查詢 dd 標籤前面的乙個兄弟

print

(soup.dd.previous_sibling)

# 運用 find_all 查詢所有屬性為 data-act="boarditem-click" 的標籤, 返回列表形式

print

(soup.find_all(attrs =))

# 列印所有屬性為 data-act="boarditem-click" 的標籤的內容

for i in soup.find_all(attrs =):

print

('名稱'

,i.string)

# 運用 find_all 查詢所有標籤名為 『p』 的標籤, 返回列表形式

print

(soup.find_all(

'p')

)# 運用find_all 查詢文字 『霸王別姬』

print

(soup.find_all(text = re.

compile

('霸王別姬'))

)# 運用 find_all 查詢所有屬性為 class = 'name' 的標籤, 返回列表形式

print

(soup.find_all(class_ =

'name'))

# 列印所有屬性為 class = 'name' 的標籤的內容

for i in soup.find_all(class_ =

'name'):

print

('名稱'

,i.string)

# 運用 css selector  方法查詢 『霸王別姬』 這個電影的標題

title = soup.select(

)# 列印標題

print

(title)

# 運用 css selector 方法查詢所有電影的標題, 返回列表形式

titles = soup.select(

)# 查詢所有電影的排名, 返回列表形式

orders = soup.select(

)# 查詢所有電影的主演, 返回列表形式

actors = soup.select(

)# 查詢所有電影的上映時間, 返回列表形式

times = soup.select(

)# 查詢所有電影的海報, 返回列表形式

images = soup.select(

)# 列印所有電影的 排名 海報 標題 主演 上映時間

for order, image, title, actor, time in

zip(orders, images, titles, actors, times)

: info =

print

(info)

# 獲取網頁資訊   

defparse_one_page

(html)

:# 將正規表示式轉換為正則物件, 可復用編譯

# ()內的內容為我們所要獲取的內容

pattern = re.

compile

('(.*?).*?(.*?).*?(.*?)

.*?(.*?).*?(.*?).*?(.*?)'

, re.s)

# 獲取匹配後的結果, 返回列表形式

contents = re.findall(pattern, html)

# 對列表進行迴圈變數,其中content是元組形式

for content in contents:

data =

data[

'排名'

]= content[0]

data[

'海報'

]= content[1]

data[

'電影'

]= content[2]

data[

'導演'

]= content[3]

.strip(

)# 將兩邊的空格刪去

data[

'得分'

]= content[4]

data[

'評價人數'

]= content[5]

data[

'語句'

]= content[6]

yield data # 返回物件

注:1.(.?)為非貪婪匹配,可以匹配任何內容;(.)為貪婪匹配,也可以匹配任何內容。

2. 在對正規表示式不熟悉的情況下,筆者建議對任何內容的獲取均採用(.*?)的形式,方便記憶且不易出錯。

Python的四種裝飾器

裝飾器是乙個函式,它需要接收乙個引數,該引數表示被修飾的函式。裝飾器是乙個巢狀函式 內部函式是乙個閉包 外部函式接收的是被修飾的函式 不帶引數裝飾器 print func def new func new argument print before result func new argument ...

PYTHON的四種作用域

作用域又可以被稱為命名空間,指變數起作用的範圍。python變數作用域可以分為四種,分別為區域性作用域 巢狀作用域 全域性作用域 內建作用域。python的四種所用域及其呼叫順序,當使用某一變數時,首先在函式內部進行搜尋 區域性作用域 l 搜尋不到便到上層函式或類中進行查詢 巢狀作用域 e 再查詢不...

獲取Class例項的四種方法

獲取class例項有四種方法,前三種方法比較常用,具體描述如下 以下示例都假設運動時類為string類。1 通過執行時類本身的.class屬性 class c1 string.class 2 通過執行時類的物件獲得 string str new string class c2 str.getclas...