本篇文章為大家展示了Python中關(guān)于數(shù)據(jù)采集和解析是怎樣的,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),錫山企業(yè)網(wǎng)站建設(shè),錫山品牌網(wǎng)站建設(shè),網(wǎng)站定制,錫山網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,錫山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
我們已經(jīng)了解到了開發(fā)一個(gè)爬蟲需要做的工作以及一些常見的問題,下面我們給出一個(gè)爬蟲開發(fā)相關(guān)技術(shù)的清單以及這些技術(shù)涉及到的標(biāo)準(zhǔn)庫和第三方庫,稍后我們會一一介紹這些內(nèi)容。
下載數(shù)據(jù) - urllib / requests / aiohttp。
解析數(shù)據(jù) - re / lxml / beautifulsoup4 / pyquery。
緩存和持久化 - pyMySQL / sqlalchemy / peewee/ redis / pymongo。
生成數(shù)字簽名 - hashlib。
序列化和壓縮 - pickle / json / zlib。
調(diào)度器 - 多進(jìn)程(multiprocessing) / 多線程(threading)。
HTML頁面
<!DOCTYPE html> <html> <head> <title>Home</title> <style type="text/css"> /* 此處省略層疊樣式表代碼 */ </style> </head> <body> <div> <header> <h2>Yoko's Kitchen</h2> <nav> <ul> <li><a href="">Home</a></li> <li><a href="">Classes</a></li> <li><a href="">Catering</a></li> <li><a href="">About</a></li> <li><a href="">Contact</a></li> </ul> </nav> </header> <section> <article> <figure> <img src="images/bok-choi.jpg" alt="Bok Choi" /> <figcaption>Bok Choi</figcaption> </figure> <hgroup> <h3>Japanese Vegetarian</h3> <h4>Five week course in London</h4> </hgroup> <p>A five week introduction to traditional Japanese vegetarian meals, teaching you a selection of rice and noodle dishes.</p> </article> <article> <figure> <img src="images/teriyaki.jpg" alt="Teriyaki sauce" /> <figcaption>Teriyaki Sauce</figcaption> </figure> <hgroup> <h3>Sauces Masterclass</h3> <h4>One day workshop</h4> </hgroup> <p>An intensive one-day course looking at how to create the most delicious sauces for use in a range of Japanese cookery.</p> </article> </section> <aside> <section> <h3>Popular Recipes</h3> <a href="">Yakitori (grilled chicken)</a> <a href="">Tsukune (minced chicken patties)</a> <a href="">Okonomiyaki (savory pancakes)</a> <a href="">Mizutaki (chicken stew)</a> </section> <section> <h3>Contact</h3> <p>Yoko's Kitchen<br> 27 Redchurch Street<br> Shoreditch<br> London E2 7DP</p> </section> </aside> <footer> ? 2011 Yoko's Kitchen </footer> </div> <script> // 此處省略JavaScript代碼 </script> </body> </html>
如果你對上面的代碼并不感到陌生,那么你一定知道HTML頁面通常由三部分構(gòu)成,分別是用來承載內(nèi)容的Tag(標(biāo)簽)、負(fù)責(zé)渲染頁面的CSS(層疊樣式表)以及控制交互式行為的JavaScript。通常,我們可以在瀏覽器的右鍵菜單中通過“查看網(wǎng)頁源代碼”的方式獲取網(wǎng)頁的代碼并了解頁面的結(jié)構(gòu);當(dāng)然,我們也可以通過瀏覽器提供的開發(fā)人員工具來了解更多的信息。
使用requests獲取頁面
GET請求和POST請求。
URL參數(shù)和請求頭。
復(fù)雜的POST請求(文件上傳)。
操作Cookie。
設(shè)置代理服務(wù)器。
【說明】:關(guān)于requests的詳細(xì)用法可以參考它的官方文檔。
頁面解析
幾種解析方式的比較
說明:BeautifulSoup可選的解析器包括:Python標(biāo)準(zhǔn)庫(html.parser)、lxml的HTML解析器、lxml的XML解析器和html5lib。
使用正則表達(dá)式解析頁面
如果你對正則表達(dá)式?jīng)]有任何的概念,那么推薦先閱讀《正則表達(dá)式30分鐘入門教程》,然后再閱讀我們之前講解在Python中如何使用正則表達(dá)式一文。
XPath解析和lxml
XPath是在XML文檔中查找信息的一種語法,它使用路徑表達(dá)式來選取XML文檔中的節(jié)點(diǎn)或者節(jié)點(diǎn)集。這里所說的XPath節(jié)點(diǎn)包括元素、屬性、文本、命名空間、處理指令、注釋、根節(jié)點(diǎn)等。
<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book> <title>Harry Potter</title> <price>29.99</price> </book> <book> <title>Learning XML</title> <price>39.95</price> </book> </bookstore>
對于上面的XML文件,我們可以用如下所示的XPath語法獲取文檔中的節(jié)點(diǎn)。
在使用XPath語法時(shí),還可以使用XPath中的謂詞。
XPath還支持通配符用法,如下所示。
如果要選取多個(gè)節(jié)點(diǎn),可以使用如下所示的方法。
【說明】:上面的例子來自于菜鳥教程網(wǎng)站上XPath教程,有興趣的讀者可以自行閱讀原文。
當(dāng)然,如果不理解或者不太熟悉XPath語法,可以在Chrome瀏覽器中按照如下所示的方法查看元素的XPath語法。
BeautifulSoup的使用
BeautifulSoup是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫。它能夠通過你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航、查找、修改文檔的方式。
1.遍歷文檔樹
獲取標(biāo)簽
獲取標(biāo)簽屬性
獲取標(biāo)簽內(nèi)容
獲取子(孫)節(jié)點(diǎn)
獲取父節(jié)點(diǎn)/祖先節(jié)點(diǎn)
獲取兄弟節(jié)點(diǎn)
2.搜索樹節(jié)點(diǎn)
find / find_all
select_one / select
【說明】:更多內(nèi)容可以參考BeautifulSoup的官方文檔。
PyQuery的使用
pyquery相當(dāng)于jQuery的Python實(shí)現(xiàn),可以用于解析HTML網(wǎng)頁。
實(shí)例 - 獲取知乎發(fā)現(xiàn)上的問題鏈接
from urllib.parse import urljoin import re import requests from bs4 import BeautifulSoup def main(): headers = {'user-agent': 'Baiduspider'} proxies = { 'http': 'http://122.114.31.177:808' } base_url = 'https://www.zhihu.com/' seed_url = urljoin(base_url, 'explore') resp = requests.get(seed_url, headers=headers, proxies=proxies) soup = BeautifulSoup(resp.text, 'lxml') href_regex = re.compile(r'^/question') link_set = set() for a_tag in soup.find_all('a', {'href': href_regex}): if 'href' in a_tag.attrs: href = a_tag.attrs['href'] full_url = urljoin(base_url, href) link_set.add(full_url) print('Total %d question pages found.' % len(link_set)) if __name__ == '__main__': main()
上述內(nèi)容就是Python中關(guān)于數(shù)據(jù)采集和解析是怎樣的,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文名稱:Python中關(guān)于數(shù)據(jù)采集和解析是怎樣的
當(dāng)前URL:http://www.chinadenli.net/article28/peigcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、云服務(wù)器、標(biāo)簽優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站收錄、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)