python 爬蟲-beautifulsoup4

利用它可以不用編寫正則表達式即可方便的實現網頁信息的提取。

pip3 install beautifulsoup4

用法講解:
常用解析庫:

lxml HTML解析器?

lxml XML解析器

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.prettify())? #格式化代碼

print(soup.title.string)

------------------------------------------------------------------

#標簽選擇器:

##選擇元素:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.title)

print(type(soup.title))

print(soup.head)

print(soup.p)

如果有很多滿足條件,只會輸出第一個。

##獲取名稱:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.title.name)

##獲取屬性:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.p.attrs['name'])#獲取name屬性的值

print(soup.p['name'])

##獲取內容:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.p.string)

##嵌套選擇:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.head.title.string)


##1、子節點和子孫節點:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.p.children)#迭代器

for i,child in enumerate(soup.p.children):

? ? print(i,child)

##2

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.p.contents)#獲取p內的所有內容,列表

##3

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.p.descendants) #迭代器

for i,child in enumerate(soup.p.descendants):

? ? print(i,child)

##1、父節點和祖先節點:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.p.parent) #迭代器

##2

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(enumerate(list(soup.p.parents))) #迭代器


##兄弟節點

from bst import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(list(enumerate(soup.a.next_siblings)))

print(list(enumerate(soup.a.privious_siblings)))

------------------------------------------------------------------

#標準選擇器

find_all(name,attrs,recursive,text,**kwargs)

可根據標簽名、屬性、內容查找文檔

##name

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'html')

print(soup.find_all(''ul))

print(type(soup.find_all('ul')[0]))


from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

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

????print(ul.find_all('li'))


##attrs

from bs4? import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.find_all(attrs={'id':'list-1'}))

print(soup.find_all(attrs = {'name':'element'}))

print(soup.find_all(id = 'list-1'))

print(soup.find_all(class_='element')) ##以上四句的輸出一樣


##text

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

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


#find(name,attrs,recursive,text,**kwargs)

返回單個元素.

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.find('ul'))

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

print(soup.find('page'))


#find_parents(),find_parent()

find_next_siblings() find_next_sibling()

find_all_next()? find_next()

find_all_previous() find_previous()


#CSS選擇器??

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

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

pirnt(soup.select('.panel.panel-heading'))# class用.

print(soup.select('ul li'))

print(soup.select('#list-2.element'))

print(type(soup.select('ul')[0]))#


from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

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

? ? print(ul.select('li'))

##獲取屬性

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

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

? ? print(u['id'])

? ? print(ul.attrs['id'])

##獲取內容

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

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

? ? print(li.get_text())


#標簽選擇器

#標準選擇器

#CSS選擇器

總結:

?* 推薦使用lxml解析庫,必要使用html.parser

?* 標簽選擇篩選功能弱但是速度快。

?* 建議使用find(),find_all()查詢匹配單個結果或者多個結果。

?* 如果對CSS選擇器熟悉可以使用select()

?* 記住常用的獲取屬性和文本值的方法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273965.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273965.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273965.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

魔獸控制命令ID

來源:http://tieba.baidu.com/p/1084211586本次技能ID大全共收錄ID368條不包括重復的ID,物品類技能的ID使用必須將物品技能單獨抽離出來并設置“物品技能false”,擁有命令字符串的物品請參考擁有相同字符串的4族中立技能。P.S所有ID都是按照從小到大的順…

python爬蟲框架--scrapy 基本使用

流程框架: 1、抓取第一頁:請求第一頁的URL并得到源代碼,進行下一步分析。 2、獲取內容和下一頁鏈接:分析源代碼,提取首頁內容,獲取下一頁鏈接等待進一步爬取。 3、保存爬取結果:將爬取結果保存為…

jsp頁面的使用

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//1.獲取資源文件 InputStream isthis.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); Str…

python爬蟲安裝錯誤與解決方式

# 安裝錯誤: error:Microsoft Visual C 14.0 is required... 下載地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted pip install xxx.whl # 運行錯誤 1: from .. Import etree ImportError:DLL load failed pip uninstall lx…

工欲善其事必先利其器系列之:在VS里面折疊js代碼

之前用vs寫js的時候經常因為js代碼過長而且不能像cs文件里面的方法一樣進行折疊而抓狂,直到在擴展庫發現了這款插件有了它就可以把代碼進行折疊了 插件地址轉載于:https://www.cnblogs.com/Chendaqian/p/3396702.html

python- 基礎 map方法

python中map()函數 map()是 Python 內置的高階函數,它接收一個函數 f 和一個 list,并通過把函數 f 依次作用在 list 的每個元素上,得到一個新的 list 并返回。 例如,對于list [1, 2, 3, 4, 5, 6, 7, 8, 9] 如果希望把list的每個…

C算法編程題(二)正螺旋

前言 上一篇《C算法編程題(一)撲克牌發牌》 寫東西前總是喜歡吐槽一些東西,還是多啰嗦幾句吧,早上看了一篇博文《談談外企漲工資那些事》,里面樓主講到外企公司包含的五類人,其實不只是外企如此&#xff0c…

同時獲取同一等級下多個class值的節點的方法

方法: tr_ soup.find("div", class_"mod_cont fcolor30").find_all("tr", attrs{"class":["md_tr font14 bgcolor-s","md_tr font14 bgcolor"]}) 同時獲取兩個不同的class.例如: 當Beauti…

【循序漸進學Python】6.Python中的函數

1. 創建函數 一個函數代表一個行為并且返回一個結果(包括None),在Python中使用def關鍵字來定義一個函數,如下: def hello(name):print hello, name ! 接下來調用函數,并查看其返回值: # output: # hello,gy! # None …

求子數組的最大和

窮舉法&#xff1a; int MaxSubArraySum(int a[], int n) { int i, j, MaxSum 0, tmpSum, cnt; for (i1; i<n; i) { for (j0; ji<n; j) { cnt 0; tmpSum 0; while (cnt < i) { tmpSum a[jcnt]; cnt; } if (MaxSum < tmpSum) { MaxSum tmpSum; } } } return Ma…

scrapy框架-post使用

scrapy中使用FormRequest向網頁提交數據 Scrapy post使用 如何post data&#xff1a; http://httpbin.org/post FormRequest : post請求 GitHub Login 借助瀏覽器分析登陸行為。 分析post的內容先嘗試一次錯誤的登陸&#xff1a;如下&#xff1a;分析&#xff1a;需要post…

duilib進階教程 -- 改進窗口拖動 (12)

現在大家應該都知道caption"0,0,0,32"&#xff0c;是指示標題欄區了吧&#xff0c;如果想要整個窗口都能拖動呢&#xff1f; 那直接把高度改成和窗口一樣不就得了~O(∩_∩)O~ 嗯&#xff0c;這樣是可以&#xff0c;比如窗口高度是600&#xff0c;那么我們指定caption…

python- 基礎 range方法的使用

1、第一種用法 index[1,2,0,5,9,8,10,6,4,7] for i in range(len(index)): print(index[i]) 結果&#xff1a; λ py test.py 1 2 0 5 9 8 10 6 4 7 2、第二種用法&#xff1a; index[1,2,0,5,9,8,10,6,4,7] for i in range(0,len(index),2): print(index[i]) 運…

Oracle行列轉換小結

目錄結構如下&#xff1a;行轉列列轉行[一]、行轉列 1.1、初始測試數據 表結構&#xff1a;TEST_TB_GRADE Sql代碼 create table TEST_TB_GRADE ( ID NUMBER(10) not null, USER_NAME VARCHAR2(20 CHAR), COURSE VARCHAR2(20 CHAR), SCORE FLOAT ) 初始…

python- 進階 與flask的搭配使用---定時任務框架APScheduler學習詳解

APScheduler簡介 在平常的工作中幾乎有一半的功能模塊都需要定時任務來推動&#xff0c;例如項目中有一個定時統計程序&#xff0c;定時爬出網站的URL程序&#xff0c;定時檢測釣魚網站的程序等等&#xff0c;都涉及到了關于定時任務的問題&#xff0c;第一時間想到的是利用ti…

Mingw下g++編譯執行順序錯誤

今天寫一個簡單的線性表時&#xff0c;用Mingw中的g編譯、調試、運行時發現一個奇怪的現象&#xff1a;程序的執行順序與實際編寫順序不一致。 編譯環境&#xff1a;代碼編寫 win7下 editplus Mingw 4.3.3 g 代碼片段如下&#xff1a; 1 //function: create a list 2 //ti…

python系統學習1-程序設計的基本方法

一、程序設計基本方法 計算機與程序設計 編譯和解釋 程序的基本編寫方法 計算機編程 1、計算機與程序設計 &#xff08;1&#xff09;、計算機是根據指令操作數據的設備 功能性&#xff1a;對數據的操作、表現為數據計算、輸出輸入處理和結果存儲。 可編程性&#xff1a;…

python 系統學習實例1.1 - 華氏度與攝氏度的轉換

# C ( F - 32 ) / 1.8???????????????????????????????????????????????????????????????????????????????? # F C * 1.8 32?????????????????????????????…

EMS問題

如果EMS啟動后在運行時報出 JMS error: "Not allowed to create destination這個錯誤&#xff0c;可能就是你啟動方式的問題了進入到EMS的安裝目錄的bin目錄下&#xff0c;運行tibemsca.bat那個文件就好使了。轉載于:https://www.cnblogs.com/xiaotianyu/p/3421737.html

python 系統學習實例1.2 - 人民幣與美元的轉換

# RMB USD / 6.78???????????????????????????????????????????????????????????????????????????????? # USD RMB* 6.78 def tempConvert(): t input("請輸入數值:") …