還在用絲襪哥(Swagger)做API文檔?快來看看這款幫你減少百分之九十工作量的開源工具!
1217
2025-04-04
環境配置
本文使用的python版本是python3
使用到的依賴包如下:
```python
pip install requests
pip install scrapy
```
在安裝scrapy之前需要先安裝Twisted(點擊下載) 下載符合自己版本的Twisted,然后將其放入python安裝目錄中,先使用命令安裝pip install Twisted。安裝完之后,scrapy就很容易安裝了,安裝命令如下:pip install scrapy。
本文要點
1.xpath 基本語法和用法示例
2.使用 xpath 爬取《盜墓筆記》實例
xpath 基本語法
xpath,全稱XML Path Language,即XML路徑語言,它是一門在XML文檔中查找信息的語言。
xpath的選擇功能十分強大,它提供了非常簡潔明了的路徑選擇表達式,幾乎所有我們想要定位的節點都可以用xpath來選擇。首先我們來看下xpath的基本語法。
在這里列出了xpath的常用匹配規則,例如 / 代表選取直接子節點,// 代表選擇所有子孫節點,. 代表選取當前節點,.. 代表選取當前節點的父節點,@ 則是加了屬性的限定,選取匹配屬性的特定節點。
xpath 用法舉例
接下來我們以豆瓣電影為例子,來熟悉一下xpath基本用法:
打開網頁 https://movie.douban.com/top250
豆瓣電影top250
首先需要找到我們所匹配的內容在html中的位置。
從圖片中可以看到排名第一的電影標題是在標簽為div,class屬性為*hd中的a標簽中所有的span標簽里面!
然后我們需要一級一級往上面找,因為這個層級太深了,有時候會匹配不到我們所需要的內容。
我們最開始匹配的標簽要滿足它的所有特征加起來是唯一的。
很容易看到屬性為article正是我們所需要的標簽!因為找不到第二個div標簽且class屬性為article的標簽!
獲取電影標題語法如下,因為是文本內容,所以要用text():
html.xpath(".//div[@class='article']/ol/li[1]//div[@class='hd']/a//span[1]/text()")
同理,我們獲取電影詳情鏈接的語法,因為是屬性,所以要用@屬性值:
html.xpath(".//div[@class='article']/ol/li[1]//div[@class='hd']/a/@href")
我們可以將其加入到爬蟲代碼中,效果如下:
豆瓣電影爬蟲
使用 xpath 爬取盜墓筆記
目標地址:
盜墓筆記全篇 http://seputu.com/
總體思路:
1.分析網頁結構,取出我們需要的標題,以及下一步需要用到的鏈接
2.根據章節的鏈接地址,再爬取出章節小說
首先分析我們需要爬取的內容,在網頁中的位置。
經過上面的講解,相信大家很容易就可以寫出xpath的語法。因為我們是要爬取所有小說內容,所以我們要循環所有li標簽里面的內容!
```python
html.xpath(".//div[@class='box']/ul//li")
```
遍歷這個列表,取出我們所需要的章節,詳細鏈接
```python
li_list?=?selector.xpath(".//div[@class='box']/ul//li")
fortextinli_list:
title?=?text.xpath("./a/text()").extract_first('')
href?=?text.xpath('./a/@href').extract_first('')
```
接下來,從詳情鏈接中取出小說內容,即完成了這個小爬蟲!
```python
p_list?=?selector.xpath(".//div[@class='content-body']//p")
fordatainp_list:
content?+=?data.xpath("./text()").extract_first('')
```
最重要的分析部分完成了,接下來主要就是將所有的內容放入代碼中,然后保存到本地就完成了。
最終爬蟲代碼如下:
```python
#?coding:?utf-8
fromscrapyimportSelector
importrequests
classKeyEnum(object):
TITLE?="title"
CONTENT?="content"
HREF?="href"
classNovelSpider(KeyEnum):
def__init__(self):
self.headers?=?{
"User-Agent":"Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?"
"AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/69.0.3497.100?Safari/537.36"
}
defspider(self):
url?='http://seputu.com/'
response?=?requests.get(url,?headers=self.headers)
selector?=?Selector(text=response.content)
data_list?=?[]
li_list?=?selector.xpath(".//div[@class='box']/ul//li")#?章節列表
fortextinli_list:
title?=?text.xpath("./a/text()").extract_first('')#?標題
href?=?text.xpath('./a/@href').extract_first('')#?鏈接
content?=?self._content_spider(href)#?詳情頁面爬蟲
data_list.append(
{
KeyEnum.HREF:?href,
KeyEnum.TITLE:?title,
KeyEnum.CONTENT:?content,
}
)
returndata_list
def_content_spider(self,?url):
content?=''
for_inrange(5):#?因為沒用代理,如果失敗,再重試5次
ifurl:#?加個url是否為空的判斷
response?=?requests.get(url,?headers=self.headers)
ifresponse.status_code?!=200:
continue
selector?=?Selector(text=response.content)
p_list?=?selector.xpath(".//div[@class='content-body']//p")
fordatainp_list:
content?+=?data.xpath("./text()").extract_first('')
returncontent
defmain(self):
data_list?=?self.spider()
foriindata_list:
withopen('盜墓筆記.txt','a',?encoding='utf-8')asf:
f.write(i['content'])
if__name__?=='__main__':
spider?=?NovelSpider()
spider.main()
```
總結
本文主要介紹了 python 中解析庫xpath的使用方法和示例,用法其實很簡單,關鍵在于多多練習!下篇文章打算分享另一個解析庫css的用法,以及和xpath之間的區別,歡迎關注!
Python Jupyter notebook XSLT & XPath
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。