作業要求:票牛網
目標內容:爬取演出資訊,包括演出名稱、詳細**、時間、位址、票價等內容
任務要求:使用xpath完成,結果儲存到csv檔案中
涉及知識點:requests獲取網頁源**、xpath獲取內容、python讀寫csv檔案
先說說xpath與上一次的正規表示式有何區別?
通過上一次實驗知道通過用正規表示式來提取資訊,經常會出現不明原因的無法提取想要內容的情況,即有時無法直接獲取資訊。最後即便絞盡腦汁終於把想要的內容提取了出來,但發現浪費了太多的時間。
但我們需要尋找的內容越複雜,構造正規表示式所需要花費的時間也就越多,而xpath卻不一樣,構造不同的xpath,所需要花費的時間幾乎是一樣的,所以用xpath從html源**中提取資訊可以大大提高效率。一句話就是,xpath是直接找位址
那麼在構造xpath語句的過程中,我們需要尋找「標誌性」的標籤。可以直接使用瀏覽器的開發者工具來協助分析網頁結構,可以提高分析效率,如下圖
即可使用xpath
步驟如下:
*第一步:
import lxml.html
import requests
path=''
html=requests.get(path).content.decode('utf-8') #獲取源**
selector = lxml.html.fromstring(html) #通過.fromstring解析html
「網頁源**」利用requests庫來獲取
第二步:
name = selector.xpath('/html/body/div[2]/div[1]/div[4]/ul/li/div/div[1]/a/@title')
href = selector.xpath('/html/body/div[2]/div[1]/div[4]/ul/li/div/div[1]/a/@href')
time = selector.xpath('/html/body/div[2]/div[1]/div[4]/ul/li/div/div[3]/text()')
address = selector.xpath('/html/body/div[2]/div[1]/div[4]/ul/li/div/a/text()')
price = selector.xpath('/html/body/div[2]/div[1]/div[4]/ul/li/div/div[4]/div[1]/div[1]/span[1]/text()')
在copy-xpath後,可以明顯看到沒有text().@title這些東西,但是如果要將它選擇出來就要告訴它,相當於那是乙個盒子,裝了很多東西,你只有明確告訴它,你要的是**(href)還是(title),還是其他的什麼,像標籤裡面的還有記得加@哦。
另外就是我們是想獲取這個網頁的所有演出資訊,如果真實只用拷貝下來的xpath,執行之後,你會發現只獲取了乙個演出資訊,這個大家很快就能發現,然後我們再去看其他演出的xpath,比如我想獲取的第乙個演出和第二個演出的名稱:
第乙個:/html/body/div[2]/div[1]/div[4]/ul/li[1]/div/div[1]/a
第二個:/html/body/div[2]/div[1]/div[4]/ul/li[2]/div/div[1]/a
可以發現只它們之間只有li的下標不一樣,其他的演出類似。為了可以獲取全部的,我們就去掉使它們不同的li的下標,就能達到理想目的。反正就是仔細觀察咯,都挺簡單。其他的時間什麼的類似操作
第三步:
content_list = #存放演出資訊
for i in range(len(name)):
dict =
print(content_list)
這裡就是把它放到字典裡面,很以前一樣
第四步:
題目要求需存放在.csv檔案中,那麼這裡我們要用到csv庫,在.py的同乙個目錄下建立***.csv檔案
with open('***.csv','w') as csvfile:
csvwriter = csv.writer(csvfile)
list = ['演出名稱','詳情頁**','演出時間','演出地點','票價'] #給.csv的第一行明確列資訊
csvwriter.writerow(list)
for i in range(len(content_list)):
csvwriter.writerow(content_list[i].values()) #獲取值存入
csvfile.close() #注意開啟檔案就需要隨時關閉
執行結果:
注意:這裡寫的都是只能爬取靜態的頁面,動態是需要跟蹤,下次說咯
xpath語言使用
xpath是一門語言,可以在xml文件中查詢資訊,在爬蟲中比正規表示式方便很多 xpath是屬於lxml庫,安裝xpath首先需要安裝python第三方庫lxml庫檔案 from lxml import etree selector etree.html html1 html1是頁面源 select...
python爬蟲XPath學習
xpath簡介和基本使用 1.前言 之前爬蟲的時候沒有用過xpath,就是沒用過lxml這個包,遇到json格式網頁我用的json.loads html格式用的beautifulsoup裡面有find和find all函式查詢標籤之類的。但是xpath在爬蟲裡面也算乙個比較重要的工具,當然要學習啦。...
Python筆記 XPath定位
xpath為xml path language,它是一種用來確定xml文件中某部分位置的語言。可以使用dump hierarchy 來獲取介面屬性 從中可以看到介面為xml。可以直接使用weditor獲取 xpath的值 從中可以看到xpath為 text 我的 import uiautomator...