BeautifulSoup 基本選擇器,標准選擇器,css選擇器


注意事項

1、測試工具pycharm,請自行安裝,

2、python3.x

3、需要導入requests庫和bs4庫

4、項目目錄結構

run.py

# -*- coding: utf-8 -*-
import rentspider

if __name__ == '__main__':
    rentspider.run()

rentspider.py

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup

def acc_page_msg(page_url):
    web_data = requests.get(page_url).content.decode('utf-8')
    soup = BeautifulSoup(web_data, 'html.parser')
    print(soup.title.string)#這里就是要填寫的測試內容

def get_pages_urls():
    urls = []
    urls.append('http://www.xxx.com/test.asp')
    return urls


def run():
    url_list = get_pages_urls()
    for url in url_list:
            acc_page_msg(url)

測試開始~~~~~~~~~

標簽選擇器

示例代碼:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>title-name</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    
</head>
<body>  
<p name="one-name">
  <b>one-one</b>
  <b>one-two</b>
</p> <p name="two-name">two</p> </body> </html>

 

print(soup.title)#將title標簽里的代碼,含title
print(soup.head)#獲取head標簽內代碼,含head
print(soup.p)#獲取第一個p標簽代碼,含p
print(soup.title.name)#獲取標簽的名稱,如這個顯示為title標簽
print(soup.p.attrs[
'name'])#獲取p標簽的name屬性的值 print(soup.p['name'])#等同與上一條指令
print(soup.p.
string)#獲取標簽p內的內容,不含p print(soup.head.title.string)#層層迭代,獲取head標簽里的title標簽里的文本 #獲取p標簽里的所有子節點,以list保存 print(soup.p.contents)#獲取p標簽里的所有子節點,以list保存 #獲取p標簽里的所有子節點,以迭代輸出 print(soup.p.children) for i, child in enumerate(soup.p.children): print(i, child) #獲取p標簽里的所有子節點以及子孫節點(子節點對應的子節點) print(soup.p.descendants) for i, child in enumerate(soup.p.descendants): print(i, child) #獲取標簽的父節點(前一級的節點) print(soup.a.parent) #獲取標簽所有的祖先節點(父節點的父節點的父節點。。。直到最頂層(把整個文檔輸出)) print(list(enumerate(soup.a.parents))) #兄弟節點 print(list(enumerate(soup.a.next_siblings))) print(list(enumerate(soup.a.previous_siblings)))

標准選擇器

示例代碼如下:

<div class="panel">
    <div class="panel-heading">
        <h4>Hello</h4>
    </div>
    <div class="panel-body">
        <ul class="list" id="list-1">
            <li class="element">Foo</li>
            <li class="element">Bar</li>
            <li class="element">Jay</li>
        </ul>
        <ul class="list list-small" id="list-2">
            <li class="element">Foo</li>
            <li class="element">Bar</li>
        </ul>
    </div>
</div>

 

1,find_all方法

find_all( name , attrs , recursive , text , **kwargs )
可根據標簽名、屬性、內容查找文檔

name(標簽名字選擇)

print(soup.find_all('ul'))#查詢所有便簽為ul的元素
print(type(soup.find_all('ul')[0]))

# 嵌套搜索

for ul in soup.find_all('ul'):
    print(ul.find_all('li'))

attr(標簽的屬性選擇)

print(soup.find_all(attrs={'id': 'list-1'}))
print(soup.find_all(attrs={'name': 'elements'}))
print(soup.find_all(id='list-1'))
#只選擇element屬性的內容, 注意樣式class與關鍵字重復,故用class_
print(soup.find_all(class_='element'))

text(文本選擇)

print(soup.find_all(text='Foo'))

2、find方法

find( name , attrs , recursive , text , **kwargs )
find返回單個元素,find_all返回所有元素

print(soup.find('ul'))
print(type(soup.find('ul')))
print(soup.find('page'))

3,其他的一些find方法

find_parents() find_parent()
find_parents()返回所有祖先節點,find_parent()返回直接父節點。

find_next_siblings() find_next_sibling()
find_next_siblings()返回后面所有兄弟節點,find_next_sibling()返回后面第一個兄弟節點。

find_previous_siblings() find_previous_sibling()
find_previous_siblings()返回前面所有兄弟節點,find_previous_sibling()返回前面第一個兄弟節點。

find_all_next() find_next()
find_all_next()返回節點后所有符合條件的節點, find_next()返回第一個符合條件的節點

find_all_previous() 和 find_previous()
find_all_previous()返回節點后所有符合條件的節點, find_previous()返回第一個符合條件的節點

CSS選擇器

通過select()直接傳入CSS選擇器即可完成選擇

示例代碼如下:

<div class="panel">
    <div class="panel-heading">
        <h4>Hello</h4>
    </div>
    <div class="panel-body">
        <ul class="list" id="list-1">
            <li class="element">Foo</li>
            <li class="element">Bar</li>
            <li class="element">Jay</li>
        </ul>
        <ul class="list list-small" id="list-2">
            <li class="element">Foo</li>
            <li class="element">Bar</li>
        </ul>
    </div>
</div>

1,基本語法

print(soup.select('.panel .panel-heading'))#選擇class的類型
print(soup.select('ul li'))#直接選擇標簽
print(soup.select('#list-2 .element'))#選擇id的類型
print(type(soup.select('ul')[0]))

2,層層迭代

for ul in soup.select('ul'):
    print(ul.select('li'))

3,獲取屬性

for ul in soup.select('ul'):
    print(ul['id'])#這兩種方法都能獲取標簽的屬性(id或其他)
    print(ul.attrs['id'])

4,獲取內容

for li in soup.select('li'):
    print(li.get_text())#輸出li里的內容

 結束


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM