亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python爬蟲新手入門之初學(xué)lxml庫

 更新時(shí)間:2020年12月20日 16:50:42   作者:Java勸退師、  
這篇文章主要給大家介紹了關(guān)于Python爬蟲新手入門之初學(xué)lxml庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.爬蟲是什么

所謂爬蟲,就是按照一定的規(guī)則,自動(dòng)的從網(wǎng)絡(luò)中抓取信息的程序或者腳本。萬維網(wǎng)就像一個(gè)巨大的蜘蛛網(wǎng),我們的爬蟲就是上面的一個(gè)蜘蛛,不斷的去抓取我們需要的信息。

2.爬蟲三要素

  • 抓取
  • 分析
  • 存儲(chǔ)

3.爬蟲的過程分析

當(dāng)人類去訪問一個(gè)網(wǎng)頁時(shí),是如何進(jìn)行的?

  ①打開瀏覽器,輸入要訪問的網(wǎng)址,發(fā)起請(qǐng)求。

 ?、诘却?wù)器返回?cái)?shù)據(jù),通過瀏覽器加載網(wǎng)頁。

 ?、蹚木W(wǎng)頁中找到自己需要的數(shù)據(jù)(文本、圖片、文件等等)。

 ?、鼙4孀约盒枰臄?shù)據(jù)。

對(duì)于爬蟲,也是類似的。它模仿人類請(qǐng)求網(wǎng)頁的過程,但是又稍有不同。

  首先,對(duì)應(yīng)于上面的①和②步驟,我們要利用python實(shí)現(xiàn)請(qǐng)求一個(gè)網(wǎng)頁的功能。

  其次,對(duì)應(yīng)于上面的③步驟,我們要利用python實(shí)現(xiàn)解析請(qǐng)求到的網(wǎng)頁的功能。

  最后,對(duì)于上面的④步驟,我們要利用python實(shí)現(xiàn)保存數(shù)據(jù)的功能。

  因?yàn)槭侵v一個(gè)簡(jiǎn)單的爬蟲嘛,所以一些其他的復(fù)雜操作這里就不說了。下面,針對(duì)上面幾個(gè)功能,逐一進(jìn)行分析。

4.如何用python請(qǐng)求一個(gè)網(wǎng)頁

作為一門擁有豐富類庫的編程語言,利用python請(qǐng)求網(wǎng)頁完全不在話下。這里推薦一個(gè)非常好用的類庫urllib.request。

4.1.抓取網(wǎng)頁

urllib庫使用

import urllib.request
 
response = urllib.request.urlopen('https://laoniu.blog.csdn.net/')
print(response.read().decode('utf-8'))

這樣就可以抓取csdn我的主頁的html文檔

我們使用爬蟲就是需要在網(wǎng)頁中提取我們需要的數(shù)據(jù),接下來我們來學(xué)習(xí)抓取一下百度搜索頁的熱榜數(shù)據(jù)

4.2.如何解析網(wǎng)頁呢

使用lxml庫

lxml 是一種使用 Python 編寫的庫,可以迅速、靈活地處理 XML 和 HTML。

它支持 XML Path Language (XPath) 和 Extensible Stylesheet Language Transformation (XSLT),并且實(shí)現(xiàn)了常見的 ElementTree API。

安裝

windows下安裝

#pip方式安裝
pip3 install lxml
 
#wheel方式安裝 
#下載對(duì)應(yīng)系統(tǒng)版本的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
pip3 install lxml-4.2.1-cp36-cp36m-win_amd64.whl

linux下安裝

yum install -y epel-release libxslt-devel libxml2-devel openssl-devel
 
pip3 install lxml

環(huán)境/版本一覽:

  • 開發(fā)工具:PyCharm 2020.2.3
  • python:3.8.5

4.3.編寫代碼

import urllib.request
from lxml import etree
 
# 獲取百度熱榜
url = "https://www.baidu.com/s?ie=UTF-8&wd=1"
# 我們?cè)谡?qǐng)求頭加入U(xiǎn)ser-Agent參數(shù),這樣可以讓服務(wù)端認(rèn)為此次請(qǐng)求是用戶通過瀏覽器發(fā)起的正常請(qǐng)求,防止被識(shí)別為爬蟲程序請(qǐng)求導(dǎo)致直接拒絕訪問
req = urllib.request.Request(url=url, headers={
 'User-Agent': 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
})
# 發(fā)起請(qǐng)求
html_resp = urllib.request.urlopen(req).read().decode("utf-8")

到這里我們可以順利獲取百度的搜索頁面html文檔

我門需要看一下熱搜排行榜的標(biāo)簽元素在哪里

找到第一條  右鍵復(fù)制 XPath   (后邊說XPath是什么)

我們需要了解并使用XPath,XPath即為XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。

復(fù)制的內(nèi)容結(jié)果是: //*[@id="con-ar"]/div[2]/div/div/table/tbody[1]/tr[1]

這xPath字符串 表示現(xiàn)在在html定位的位置就是熱點(diǎn)新聞第一行內(nèi)容

5.XPath常用規(guī)則


表達(dá)式 描述
nodename 選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)
/ 從當(dāng)前節(jié)點(diǎn)選取直接子節(jié)點(diǎn)
// 從當(dāng)前節(jié)點(diǎn)選取子孫節(jié)點(diǎn)
. 選取當(dāng)前節(jié)點(diǎn)
.. 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)
@ 選取屬性
* 通配符,選擇所有元素節(jié)點(diǎn)與元素名
@* 選取所有屬性
[@attrib] 選取具有給定屬性的所有元素
[@attrib='value'] 選取給定屬性具有給定值的所有元素
[tag] 選取所有具有指定元素的直接子節(jié)點(diǎn)
[tag='text'] 選取所有具有指定元素并且文本內(nèi)容是text節(jié)點(diǎn)


 

6.繼續(xù)分析

那么我們要獲取所有的熱點(diǎn)新聞該怎么寫呢

繼續(xù)看網(wǎng)頁

可以看到所有的熱榜分別在三個(gè)<tbody>之下

修改一下剛才復(fù)制的XPath

//*[@id="con-ar"]/div[2]/div/div/table/tbody[1]/tr[1] 改為  //*[@id="con-ar"]/div[2]/div/div/table/tbody/tr

這樣XPath就會(huì)定位到這三個(gè)tbody下的所有tr元素內(nèi)容

我們繼續(xù)看一下tr是不是我們想要的內(nèi)容,展開一個(gè)tr看看

淦~還有一堆,,

這該怎么辦。我們需要拿到數(shù)據(jù)是 【標(biāo)題】 【訪問鏈接】 【熱度】,現(xiàn)在手里已經(jīng)拿到的是所有的tr元素

緊接著從tr下手 直接 拿到下面所有<a>標(biāo)簽的標(biāo)題與超鏈接

標(biāo)題的XPath: */a/@title 超鏈接的XPath: */a/@href

*表示匹配tr下的所有元素  /a是在*找到第一個(gè)a標(biāo)簽  @是屬性選擇器 title和href就是要選擇的素屬性了

還剩下個(gè)熱度,let‘s me 繼續(xù)操作,直接選擇tr下的第二個(gè)td  XPath: td[2]

分析完畢,把完整的代碼貼出來

import urllib.request
from lxml import etree
 
# 獲取百度熱榜
 
url = "https://www.baidu.com/s?ie=UTF-8&wd=1"
# 我們?cè)谡?qǐng)求頭加入U(xiǎn)ser-Agent參數(shù),這樣可以讓服務(wù)端認(rèn)為此次請(qǐng)求是用戶通過瀏覽器發(fā)起的正常請(qǐng)求,防止被識(shí)別為爬蟲程序請(qǐng)求導(dǎo)致直接拒絕訪問
req = urllib.request.Request(url=url, headers={
  'User-Agent': 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
 })
html_resp = urllib.request.urlopen(req).read().decode("utf-8")
html = etree.HTML(html_resp)#初始化生成一個(gè)XPath解析對(duì)象
_list = html.xpath("http://*[@id='con-ar']/div[2]/div/div/table/tbody/tr")
print(f"article count : {len(_list)}")
 
for tr in _list:
 title = tr.xpath("*/a/@title")[0]
 href = tr.xpath("*/a/@href")[0]
 hot = tr.xpath("string(td[2])").strip()
 print(f"{hot}\t{title}\thttps://www.baidu.com{href}")

點(diǎn)擊運(yùn)行,程序啪就跑起來了,很快啊,數(shù)據(jù)全都過來了,我全都接住了,我笑了一下。

到此就完成了lxml xpath的基本使用,更詳細(xì)的xpath教程請(qǐng)看 :https://www.w3school.com.cn/xpath/index.asp

爬蟲三要素,抓取數(shù)據(jù)完成了,剩余的分析與存儲(chǔ)就先不說了

總結(jié)

到此這篇關(guān)于Python爬蟲新手入門之初學(xué)lxml庫的文章就介紹到這了,更多相關(guān)Python爬蟲入門之lxml庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Python中使用全局日志時(shí)需要注意的問題

    在Python中使用全局日志時(shí)需要注意的問題

    這篇文章主要介紹了在Python中使用全局日志時(shí)需要注意的問題, 作者由uliweb使用時(shí)遇到的問題分析全局日志出現(xiàn)錯(cuò)誤時(shí)的解決方法,需要的朋友可以參考下
    2015-05-05
  • python global關(guān)鍵字的用法詳解

    python global關(guān)鍵字的用法詳解

    這篇文章主要介紹了python global關(guān)鍵字的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • python 利用pyttsx3文字轉(zhuǎn)語音過程詳解

    python 利用pyttsx3文字轉(zhuǎn)語音過程詳解

    這篇文章主要介紹了python 利用pyttsx3文字轉(zhuǎn)語音過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • python中常見錯(cuò)誤及解決方法

    python中常見錯(cuò)誤及解決方法

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python中常見錯(cuò)誤及解決方法的知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下。
    2020-06-06
  • Python的多種對(duì)象工廠模式方便代碼維護(hù)擴(kuò)展

    Python的多種對(duì)象工廠模式方便代碼維護(hù)擴(kuò)展

    這篇文章主要為大家介紹了Python的多種對(duì)象工廠模式更方便我們進(jìn)行代碼維護(hù)擴(kuò)展,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python基于mysql實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    Python基于mysql實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Python基于mysql實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Python海龜繪圖詳解

    Python海龜繪圖詳解

    python2.6版本中后引入的一個(gè)簡(jiǎn)單的繪圖工具,叫做海龜繪圖(Turtle Graphics),出現(xiàn)在1966年的Logo計(jì)算機(jī)語言。海龜繪圖(turtle庫)是python的內(nèi)部模塊,使用前導(dǎo)入即可。本文就帶大家深入了解一下海龜繪圖,快來跟隨小編一起學(xué)習(xí)吧
    2021-12-12
  • python實(shí)現(xiàn)健康碼查驗(yàn)系統(tǒng)

    python實(shí)現(xiàn)健康碼查驗(yàn)系統(tǒng)

    這篇文章主要介紹了?python實(shí)現(xiàn)健康碼查驗(yàn)系統(tǒng),主要用到的是python用了opencv庫和pyzbar庫,文中給大家提供一段代碼判斷是否綠碼,需要的朋友可以參考下
    2022-04-04
  • Python實(shí)現(xiàn)一個(gè)數(shù)組除以一個(gè)數(shù)的例子

    Python實(shí)現(xiàn)一個(gè)數(shù)組除以一個(gè)數(shù)的例子

    今天小編就為大家分享一篇Python實(shí)現(xiàn)一個(gè)數(shù)組除以一個(gè)數(shù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python數(shù)據(jù)可視化之環(huán)形圖

    Python數(shù)據(jù)可視化之環(huán)形圖

    這篇文章主要介紹了Python數(shù)據(jù)可視化之環(huán)形圖,主要使用兩種不同的方式來可視化環(huán)形圖,并均給出了完整的代碼示例。需要的朋友可以參考一下,希望對(duì)你的工作和學(xué)習(xí)有所幫助
    2022-01-01

最新評(píng)論