如果你需要某些網站提供你需要的訊息,作為某些用途,比如說
某種提供資訊的App,或者bigdata的計算。
一種方式是copy paste網頁上的資料,再存在資料庫中,但,如果網頁資料有新增,基本上你是無從得知的,只能一筆一筆慢慢比對。
python 提供了很好的opensource,pyquery。
用最簡單的方式把你要的資訊爬出來。
下面為一簡單範例,將中油直營站的地址全部找出來。
先看一下網站的內容
http://pd.wh.seed.net.tw/fetc/cpc/cpc0331.html
再用這指令看一下這網站的source code
curl http://pd.wh.seed.net.tw/fetc/cpc/cpc0331.html
基本上是可以用chorme看source code的,但指令用習慣了,就用curl了。
內容被我簡化,如下
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>台灣中油直營據點</title>
<link href="css/main.css" rel="stylesheet" type="text/css" />
<style type="text/css">
body {
background-color: #DDF5FF;
}
</style>
</head>
<tr height="22">
<td height="22" bgcolor="#FFFFCE">台灣中油-西定路站</td>
<td bgcolor="#FFFFCE">基隆市中山區西定路190號</td>
<td align="center" bgcolor="#FFFFCE">7:00</td>
<td align="center" bgcolor="#FFFFCE">21:00</td>
</tr>
<tr height="22">
<td height="22" bgcolor="#fefbec">台灣中油-成功一路站</td>
<td bgcolor="#fefbec">基隆市仁愛區成功一路105號</td>
<td align="center" bgcolor="#fefbec">0:00</td>
<td align="center" bgcolor="#fefbec">24:00</td>
</tr>
---------------------------------------------------------------------------
程式在此
---------------------------------------------------------------------------
# -*- coding: utf-8 -*-
from pyquery import PyQuery as pq
import sys
import os,codecs
counter = 0
q = pq(url='http://pd.wh.seed.net.tw/fetc/cpc/cpc0331.html')
q1 = pq(url='http://www.wdps.ntpc.edu.tw/index.php')
q2 = pq(url='http://tw.yahoo.com/')
print(q('title').text().encode('iso-8859-1'))
print ('---------------------------')
#os.exit(1)
ss = q('title').find('table').eq(1).text()
counter= 0
#print ss
for data in q('tr'):
res = q(data).find('td').eq(1).text().encode('iso-8859-1')#.decode('iso-8859-1')
print res
resnum2 = res.find('市')
resnum1= res.find('縣')
resnum = res.find('號')
if resnum>0 and (resnum1 >0 or resnum2> 0):
counter = counter + 1
print res
print q(data).find('td').eq(0).text().encode('iso-8859-1')
--------------------------------------------------------------------------------------
1. 由於此網頁的response是用iso-8859-1所以用此去encode,一般都是utf-8。
2. 這方法還是需要很多try and error,但越爬越快吧。
3. 觀察網頁資料,每個tr下的td第一根第二個元素是我們要的因此你可以這樣取出來。
q(data).find('td').eq(0).text().encode('iso-8859-1')
q(data).find('td').eq(1).text().encode('iso-8859-1')
試試看,你現在拿到中油的站名跟地址了。
接下來能做些什麼應用,就靠自己的創意了。