天天看點

使用lxml解析HTML網頁并批量擷取資料

當我們需要從網頁中擷取一些需要的資料時,我們可以使用一些html網頁分析的函數庫來快速的擷取資料。目前有多款解析HTML網頁的第三方庫可供使用,例如lxml,beautiful soup等等。下面以lxml為例從網頁中爬取我們需要的統計資料

我希望從北京公交網站擷取北京公交的所有線路資訊,進而為後續處理做準備

首先引用requests用于向網頁發出通路請求,擷取html網頁原始資料

import requests

再引用lxml中的etree類

import lxml.etree

首先輸入我們起始的爬取位址,公交線路網頁的索引頁,以此為起點,擷取所有的線路對應的url的值

lxml.etree将html網頁按照标簽進行一層一層的劃分,形成逐漸向下生長的樹結構,我們通過檢視網頁的源代碼找到我們想要的資料在哪個标簽内,使用xpath函數提取對應标簽内的資料`

```python
import requests
import lxml.etree

def get_all_line():
      url = 'http://beijing.gongjiao.com/lines_all.html'
      text = requests.get(url).text
      doc = lxml.etree.HTML(text)
      all_lines = doc.xpath("//div[@class='list']/ul/li")
      f=open("./data/"+'allline.txt','a')
      print(len(all_lines))
      for line in all_lines:
            line_name = line.xpath("./a/text()")[0].strip()
          line_url = line.xpath("./a/@href")[0]
            f.write(line_name+'$$'+line_url+'\n')
       f.close()
           
這樣我們獲得了所有線路對應的url,在此基礎上再依次爬取每一個線路網頁的相關資料
在爬取線路資料之前,我們需要先建立字典用于儲存不同字段的資料,便于管理。根據需要,我建立了一個13個字段的字典