pythonbeautiful
A. 爬蟲利器 Beautiful Soup 之遍歷文檔
Beautiful Soup 是一個可以從 HTML 或 XML 文件中提取數據的 python 庫,它提供了一些簡單的操作方式來幫助你處理文檔導航,查找,修改文檔等繁瑣的工作。因為使用簡單,所以 Beautiful Soup 會幫你節省不少的工作時間。
你可以使埋信用如下命令安裝 Beautiful Soup。二選一即可。
Beautiful Soup 不僅支持 Python 標搜液辯准庫中的 HTML 解析器,還支持很多第三方的解析器,比如 lxml,html5lib 等。初始化 Beautiful Soup 對象時如果不指定解析器,那麼 Beautiful Soup 將會選擇最合適的解析器(前提是你的機器安裝了該解析器)來解析文檔,當然你也可以手動指定解析器。這里推薦大家使用 lxml 解析器,功能強大,方便快捷,而且該解析器是唯一支持 XML 的解析器。
你可以使用如下命令來安裝 lxml 解析器。二選一即可。
Beautiful Soup 使用來起來非常簡單,你只需要傳入一個文件操作符或者一段文本即可得到一個構建完成的文檔對象,有了該對象之後,就可以對該文檔做一些我們想做的操作了。而傳入的文本大都是通過爬蟲爬取過來的,所以 Beautiful Soup 和 requests 庫結合使用體驗更佳。
Beautiful Soup 將復雜的 HTML 文檔轉換成一個復雜的樹形結構,每個節點都是 Python 對象,所有對象可以歸納為 4 種: Tag,NavigableString,BeautifulSoup,Comment。
Tag 就是 HTML 的一個標簽,比如 p,p 標簽等,也是我們用的最多的一個對象。
NavigableString 指標簽內部的文字,直譯就是可遍歷的字元串。
BeautifulSoup 指一個文檔的全部內容,可以當成一個 Tag 來處理。
Comment 是一個特殊的 NavigableString,其輸出內容不包括注視內容。
為了故事的順利發展,我們先定義一串 HTML 文本,下文的所有例子都是基於這段文本的。
Tag 有兩個很重要的屬性,name 和 attributes。期中 name 就是標簽的名字,attributes 是標簽屬性。標簽的名字和屬性是可以被修改的,注意,這種修改會直接改變 BeautifulSoup 對象。
由以上例子我么可以看出,可以直接通過點屬性的方法來獲取 Tag,但是這種方法只能獲取第一個標簽。同時我們可以多次調用點屬性這個方法,來獲取更深層次的標簽。
如果想獲得所有的某個名字的標簽,則可以使用 find_all(tag_name) 函數。
我們可以使用 .contents 將 tag 以列表方式輸出,即將 tag 的子節點格式化為列表,這很有用,意味著可以通過下標進行訪問指定節點。同時我們還可以通過 .children 生成器對節點的子節點進行遍歷。
.children 只可以獲取 tag 的直接節點,而獲取不到子孫節點,.descendants 可以滿足你。
通過 .parent 屬性獲取標簽的父親節點。世缺 title 的父標簽是 head,html 的父標簽是 BeautifulSoup 對象,而 BeautifulSoup 對象的父標簽是 None。
同時,我們可以通過 parents 得到指定標簽的所有父親標簽。
通過 .next_sibling 和 .previous_sibling 來獲取下一個標簽和上一個標簽。
你可能會納悶,調用了兩次 next_sibling 怎麼只有一個輸出呢,這方法是不是有 bug 啊。事實上是 p 的第一個 next_sibling 是 p 和 p 之間的換行符 。這個規則對於 previous_sibling 同樣適用。
另外,我們可以通過 .next_siblings 和 .previous_siblings 屬性可以對當前節點的兄弟節點迭代輸出。在該例子中,我們在每次輸出前加了前綴,這樣就可以更直觀的看到 dib 的第一個 previous_sibling 是換行符了。
通過 .next_element 和 .previous_element 獲取指定標簽的前一個或者後一個被解析的對象,注意這個和兄弟節點是有所不同的,兄弟節點是指有相同父親節點的子節點,而這個前一個或者後一個是按照文檔的解析順序來計算的。
比如在我們的文本 html_doc 中,head 的兄弟節點是 body(不考慮換行符),因為他們具有共同的父節點 html,但是 head 的下一個節點是 title。即 soup.head.next_sibling=title soup.head.next_element=title
同時這里還需要注意的是 title 下一個解析的標簽不是 body,而是 title 標簽內的內容,因為 html 的解析順序是打開 title 標簽,然後解析內容,最後關閉 title 標簽。
另外,我們同樣可以通過 .next_elements 和 .previous_elements 來迭代文檔樹。由遺下例子我們可以看出,換行符同樣會佔用解析順序,與迭代兄弟節點效果一致。
本章節介紹了 Beautiful Soup 的使用場景以及操作文檔樹節點的基本操作,看似很多東西其實是有規律可循的,比如函數的命名,兄弟節點或者下一個節點的迭代函數都是獲取單個節點函數的復數形式。
同時由於 HTML 或者 XML 這種循環嵌套的復雜文檔結構,致使操作起來甚是麻煩,掌握了本文對節點的基本操作,將有助於提高你寫爬蟲程序的效率。
B. python怎麼把一個單詞加到兩個單詞的中間
利用正則塵畝表達式可以實現,以下代碼演示在單詞hello和python之間添加單詞世清beautiful:
import re
text = 'hello python!'
pattern = r'(?=python)'
add_word = 'beautiful'
result = re.sub(pattern,add_word + '派返森 ',text)
print(result)
輸出:
hello beautiful python!
C. Python與爬蟲有什麼關系
爬蟲一般是指網路資源的抓取,因為python的腳本特性,python易於配置,對字元的處理也非常靈活,加上python有豐富的網路抓取模塊,所以兩者經常聯系在一起。 簡單的用python自己的urllib庫也可以;用python寫一個搜索引擎,而搜索引擎就是一個復雜的爬蟲。從這里你就了解了什麼是Python爬蟲,是基於Python編程而創造出來的一種網路資源的抓取方式,Python並不是爬蟲。
Python為什麼適合些爬蟲?
1)抓取網頁本身的介面
相比與其他靜態編程語言,如java,c#,C++,python抓取網頁文檔的介面更簡潔;相比其他動態腳本語言,如perl,shell,python的urllib2包提供了較為完整的訪問網頁文檔的API。(當然ruby也是很好的選擇)
此外,抓取網頁有時候需要模擬瀏覽器的行為,很多網站對於生硬的爬蟲抓取都是封殺的。這是我們需要模擬user agent的行為構造合適的請求,譬如模擬用戶登陸、模擬session/cookie的存儲和設置。在python里都有非常優秀的第三方包幫你搞定,如Requests,mechanize
2)網頁抓取後的處理
抓取的網頁通常需要處理,比如過濾html標簽,提取文本等。python的beautifulsoap提供了簡潔的文檔處理功能,能用極短的代碼完成大部分文檔的處理。
其實以上功能很多語言和工具都能做,但是用python能夠幹得最快,最干凈。Life is short, u need python.
D. python3 爬蟲 一定要用beautiful soup嗎
BeautifulSoup4的安裝
一、使用pip直接安裝beautifulsoup4 (如何安裝pip請看上一篇文章介紹)
F:\kanbox\pythoncode\zyspider>pip install beautifulsoup4
Collecting beautifulsoup4
Downloading beautifulsoup4-4.4.0-py3-none-any.whl (80kB)
328kB/s
Installing collected packages: beautifulsoup4
Successfully installed beautifulsoup4-4.4.0
F:\kanbox\pythoncode\zyspider>
或者從官網下載Beautifulsoup的軟體包,然後解壓,cmd命令行進入解壓包目錄,輸入以下命令安裝:python setup.py install
=======================================
網路爬蟲實例代碼,抓取新浪愛彩雙色球開獎數據實例代碼:
1 __author__ = 'zdz8207'
2 from bs4 import BeautifulSoup
3
4 import urllib.request
5 import urllib.parse
6 import re
7 import urllib.request, urllib.parse, http.cookiejar
8
9 def getHtml(url):
10 cj = http.cookiejar.CookieJar()
11 opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
12 opener.addheaders = [('User-Agent',
13 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36'),
14 ('Cookie', '4564564564564564565646540')]
15
16 urllib.request.install_opener(opener)
17
18 html_bytes = urllib.request.urlopen(url).read()
19 html_string = html_bytes.decode('utf-8')
20 return html_string
21
22 html_doc = getHtml("http://zst.aicai.com/ssq/openInfo/")
23 soup = BeautifulSoup(html_doc, 'html.parser')
24
25 # print(soup.title)
26 #table = soup.find_all('table', class_='fzTab')
27 #print(table)#<tr onmouseout="this.style.background=''" 這種tr丟失了
28 #soup.strip() 加了strip後經常出現find_all('tr') 只返回第一個tr
29 tr = soup.find('tr',attrs={"onmouseout": "this.style.background=''"}) 30 #print(tr) 31 tds = tr.find_all('td') 32 opennum = tds[0].get_text() 33 #print(opennum) 34 35 reds = [] 36 for i in range(2,8): 37 reds.append(tds[i].get_text()) 38 #print(reds) 39 blue = tds[8].get_text() 40 #print(blue) 41 42 #把list轉換為字元串:(',').join(list) 43 #最終輸出結果格式如:2015075期開獎號碼:6,11,13,19,21,32, 藍球:4 44 print(opennum+'期開獎號碼:'+ (',').join(reds)+", 藍球:"+blue)
E. python使用beautiful soap時查到一段代碼,不太了解,求大神解釋
您好,如果你用的是新版的Den或ubuntu,那麼可以通過系統的軟體包管理來安裝:
$ apt-get install Python-bs4
Beautiful Soup 4 通過PyPi發布,所以如果你無法使用系統包管理安裝,那麼也可以通過 easy_install 或 pip 來安裝.包的名字是beautifulsoup4 ,這個包兼容Python2和Python3.
$ easy_install beautifulsoup4
$ pip install beautifulsoup4
(在PyPi中還有一個名字是 BeautifulSoup 的包,但那可能不是你想要的,那是 Beautiful Soup3 的發布版本,因為很多項目還在使用BS3, 所以 BeautifulSoup 包依然有效.但是如果你在編寫新項目,那麼你應該安裝的 beautifulsoup4 )
如果你沒有安裝 easy_install 或 pip ,那你也可以 下載BS4的源碼 ,然後通過setup.py來安裝.
$ Python setup.py install
如果上述安裝方法都行不通,Beautiful Soup的發布協議允許你將BS4的代碼打包在你的項目中,這樣無須安裝即可使用.
作者在Python2.7和Python3.2的版本下開發Beautiful Soup, 理論上Beautiful Soup應該在所有當前的Python版本中正常工作。
F. python中bs4.beautiful解析有時候不加前邊的bs4 有什麼區別
這個就是看你是如何import包的
如果是import bs4,那麼就應該是bs4.BeautifulSoup
如果是from bs4 import BeautifulSoup,就可以直接使用BeautifulSoup
G. python是什麼干什麼用的 四個你需要知道的主要用途
Python是一種全棧的開發語言,所以你如果能學好Python,那麼前端,後端,測試,大數據分析,爬蟲等這些工作你都能勝任。python有四大主要應用:網路爬蟲,web開發,人工智慧以及自動化運維。
1.網路爬蟲
相比與其他靜態編程語言,如java,c#,C++,python抓取網頁文檔的介面更簡潔。python的urllib2包提供了較為完整的訪問網頁文檔的API。抓取的網頁通常需要處理,比如過濾html標簽,提取文本等。python的beautifulsoap提供了簡潔的文檔處理功能,能用極短的代碼完成大部分文檔的處理。
2.web開發
python最大的特點就是簡潔,使用python做網站開發,在代碼的維護方面可以節省很大的精力。而且python還有很多優秀的web框架可以使用。
3.人工智慧
人工智慧的核心演算法是完全依賴於C/C++的,因為是計算密集型。Python是這些庫的API binding,使用Python是因為CPython的膠水語言特性,要開發一個其他語言到C/C++的跨語言介面,Python是最容易的,比其他語言的ffi門檻要低不少,尤其是使用Cython的時候,Python歷史上也一直都是科學計算和數據分析的重要工具,有numpy的底子,用numpy這樣的基礎庫既減少了開發工作量,也方便從業人員上手。
4.自動化運維
一個運維人員通常要管理上百、上千台伺服器,運維工作也變的重復、繁雜。把運維工作自動化,python能夠把運維人員從伺服器的管理中解放出來,讓運維工作變得簡單、快速、准確.
H. python中常見的運算符有哪些分類
Python中的運算符主要分為六大類,其中包含算術運算符、賦值運算符、比較/關系運算符、邏輯運算符、位運算符以及三目運算符。
1、Python算術運算符
是對數值類型的變數進行運算的,比如說:加、減、乘、除、取模和乘方運算等;
2、Python賦值運算符
是對已存在的變數進行重新設置新值的運算符;
3、Python關系運算符(也被稱為比較運算符)
關系運算符結果一般包含bool、True、False等,而關系表達式經常用在if結構的條件中或循環結構的條件中;
4、Python邏輯運算符
是用於連接多個條件,一般來講就是關系表達式;
5、Python位運算符
主要是用於數值類型的二進制的運算;
6、Python三目運算符
在Python中,沒有其他語言的三目運算符,可以藉助if語言實現類似的三目運算符。