1. 程式人生 > >Python BeautifulSoup4 我碰到的一些不常用的用法

Python BeautifulSoup4 我碰到的一些不常用的用法

1、查詢某些無屬性、無樣式的標籤

如果在某個ul下,有多個li,一半是有樣式,一半是沒有的,而剛好他們是兩個類別,你也恰好需要這兩個,例如:

html = '''
    <ul>
        <li>hello world!</li>
        <li class="hh">hello world!</li>
    </ul>
'''

倘若數量少,或是有奇偶對稱倒好說,但如果是隨機呢,之前記得xpath裡,是有可以通過not(@屬性)的方式,但是bs4裡並沒有,然後查了半天,翻到這篇,那我們可以設定class為False。

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')
# 注意不要把False帶上引號
no_tag = soup.find('li',{'class':False})

這裡寫圖片描述

2、多個查詢條件

倘若比如a標籤的class和alt標籤每個單獨都不是唯一的,但是組合在一起是唯一的,例如

html = '''
<a class="nav-span" href="//bbs.qyer.com/" data-bn-ipg="head-nav-community" title="窮遊論壇">社群</a>
'''

我們知道attrs是個字典,裡面可以包含多組key-value,不過一開始沒有想到,後來突然想到的,只需要在attrs(可省略)里加入就好,不過很少有這樣用的情況,

soup.find('a',{'class':'nav-span','data-bn-ipg':'head-nav-community'})

這裡寫圖片描述

我在測試的時候發現個不穩定因素,測試用的ipython。
可以看到title中有中文,我們查詢返回的是unicode編碼,你扔中文進去也不一定對,但是我測試成功了一次,而且是爬的整個頁面,然後直接測試的,但建議還是不要使用有中文的作為查詢條件。

3、查詢某個屬性的class返回的是個列表,因為可能class會有多個樣式,而id只有一個,且唯一

html1 = '''
    <p class="type" id="city">房型:雙人間</p>
'''

這裡寫圖片描述

可以看到class返回的是個列表,而id是字串。
並且測試的時候發現,當html裡除了一個id標籤沒有其他標籤時,試圖直接用soup.p[‘id’]的時候都會報錯,這也是為什麼我前面扔了一個同時有class和id的html,錯誤如圖:

這裡寫圖片描述

原因在於id因為是屬性,一般用的時候是和attrs一起用,現發現也可以省略,它要想獲得它的id,必須先獲得這整個html及其內容,然後再獲取其內容。所以如果只有id這個標籤,必須先將soup.p賦給一個變數,然後用這個變數去獲得id值:
這裡寫圖片描述

相關推薦

Python BeautifulSoup4 碰到的一些常用用法

1、查詢某些無屬性、無樣式的標籤 如果在某個ul下,有多個li,一半是有樣式,一半是沒有的,而剛好他們是兩個類別,你也恰好需要這兩個,例如: html = ''' <ul> <li>hello world!

一些常用但又很有用的css小tips

1.box-sizing:border-box   box-sizing有三個屬性:content-box(預設值) || border-box || inhreit。第一個自然不用說,比如我們設定一個div,寬度和高度都是100px,此時你給它加了padding:2px和border:1px solid #

前端———CSS3一些常用卻實用的屬性(一)

一.transparent:隱藏邊框線,這裡是隱藏了右邊的邊框線,其他 left top bottom 一樣的操作 二丶**.opaciiy** 元素的不透明: 把整個元素都能設定為透明 例子 未用opacity之前: 使用opacity之後:div背景顏色也透明 div裡邊的文字也

oracle常用函式(七)-----ORACLE一些常用的指令碼

本篇介紹一下一些不太常用的指令碼,它們往往有“奇能異效”,但是由於不太常用、不常見、或效率方面的原因,往往被大多數人給遺忘在某些角落裡。呵呵,不知道你看見下面這些指令碼,是否覺得眼熟呢? 1: 如果我需要從SCOTT模式下EMP表中查詢職位為CLERK(祕書)、SALES

js中的一些常用到的事件

介紹了一些平常開發中不常用到的事件 1、頁面解除安裝事件beforeunload,unload 2、session事件pageshow,pagehide 3、clipboard事件copy,paste,cut 1 頁面解除安裝事件 1.1 beforeunload

Python 3.8 新特性預覽,解除一些合法的語句,增加了一些用法

  對,你沒看錯,是Python3.8的新特性概覽。還沒有釋出,目前還在規劃階段。注意這是目前的草案,最終確定版本可能會有一些變化。                 學習Python中有不明白推

記錄一些Python常用但非常好用的函數

pri 對齊 light world hello 好用 div 記錄 長度 zfill(): 方法返回指定長度的字符串,原字符串右對齊,前面填充0。 print(‘Helloworld‘.zfill(50))00000000000000000000000000000000

Python中集合(set)的基本操作以及一些常見的用法

python set 集合 集合的一些常見用法 Python除了List、Tuple、Dict等常用數據類型外,還有一種數據類型叫做集合(set),集合的最大特點是:集合裏邊的元素是不可重復的並且集合內的元素還是無序的,所以一般情況下集合常用的兩個場景是:1.去重(如:列表去重);2.關

python 常用知識點總結

string rate lis 字符 列表 obj object 一個 判斷 1、isdigit() 判斷是否是數字型字符串 2、enumerate(list) 將列表、字典、元祖加上下標 3、\033[31;1m string \033[0m 將stri

python *args **kwargs,傳入固定的參數給函數,或者傳入很多的內容給函數,常用在構造函數中。

沒有 常用 但是 避免 內容 自動 基本 name 調用 ‘‘‘ 例1:展示*args的用法,傳入多個參數,不進行預先定義。 本例傳入了3個參數。沒有預先定義。在函數內自動生成元組() ‘‘‘ def q1(*args): print(‘例1‘) prin

python中Properties的一些用法

class format height 屬性 orm 一個 one def cor property最大的用處就是可以為一個屬性制定getter,setter,delete和doc,他的函數原型為: def __init__(self, fget=None, fse

python中mysql常用用法

python-mysql查看 查看變量 show variables like ‘auto%‘;信息輸出: echo "select user,host,password from mysql.user" |mysql -uroot -pli

python-selenum3 第五天定位——常用定位與css定位詳

tag input標簽 get ble XP 名稱 () 超鏈接 不存在 使用tag來定位tag定位的是標簽,不常用例如:百度的輸入框標簽是input最終會報錯,因為百度首頁input標簽太多了 driver = webdriver.Firefox(executable_

[Python筆記]PyCharm的一些常用功能--(持續更新至11.04)

1.多行註釋 選定需要註釋的程式碼塊,選擇選單欄Code->Comment with Line Comment 預設熱鍵: Ctrl+/ 2.程式碼格式化 選單欄code->Reformat Code 預設熱鍵: Ctrl+Alt+L 3.程式碼全域性替換 在

Python 學習筆記: 一些常用模組

Python 一些常用模組   python 裡的一些常用模組。   1 namedtuple 模組 from collections import namedtuple Point = namedtuple('Point',['x','y']) p1= Point(1,

女朋友躲著玩手機?得用Python了!在她知情的情況下解密碼!

如果你想參與漏洞研究、逆向工程和滲透,我建議你時候用Python語言。Python已經有很多完善可用的庫,我將在這裡把他們列出來。 這個清單裡的工具大部分都是Python寫成的,一部分是現有C庫的Python繫結,這些庫在Python中都可以簡單使用。 一些強力工具(pentest fram

Python中xlrd常用用法整理

1.背景 1.1 安裝模板: 到python官網下載http://pypi.python.org/pypi/xlrd模組安裝,前提是已經安裝了python 環境。 在cmd命令列輸入:pip install xlrd 1.2 xlrd介紹:xlrd是python環境下

python閉包,看懂請揍

什麼是閉包? 閉包就是一個個內嵌函式+內嵌函式裡面引用了外部變數+返回這個內嵌函式(一般是這樣) 為什麼使用閉包? 有點類似與函式模板?。。 舉一個實際的例子: class people: name = '' has = [] def __init__(self, n

Java將CST的時間字串轉換成需要的日期格式字串 SimpleDateFormat的一些常用用法

  已知得到的Date型別的變數meettingdate 的值為Sun Dec 16 10:56:34 CST ;現在要將它改為yyyy-MM-dd型別或yyyy年MM月dd日; 變為yyyy年MM月dd日: SimpleDateFormat dsf = new SimpleDateForma

【PB】PowerBuilder中的一些常用的方法

25、Shutdown from application [PB external function declaration] FUNCTION boolean ExitWindowsEx(ulong uFlags, long dwReserved ) & LIBRARY 'user32.dll' [