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