前兩天有網友讓我幫忙做乙個通過快遞100這個**查快遞物流資訊的爬蟲。研究了一下,發現實現起來不是很複雜,在此整理成文件並share給大家。
爬取思路:輸入運單號後從伺服器獲取快遞公司對應的id號,然後拼接出新的請求位址來獲取相關資訊。
class
kuaidi100()
:def
__init__
(self)
: self.comcode =
"" self.temp =
"" self.url = r""
self.headers =
新建kuaidi100類,初始類方法建立comcode和temp兩個變數。comcode用來接收伺服器返回的快遞公司id,temp在請求物流資訊時會用到。
headers裡需要把』x-requested-with』: 'xmlhttprequest』加上。
def
getinfo
(self, num)
: self.num = num
self.form_data =
ret = requests.post(self.url, headers=self.headers, data=self.form_data)
find_com =
(ret.text.split(
",")[2
])self.comcode = find_com[find_com.find(
'comcode')+
10:-1
] self.temp = random.random(
) self.kuaidi_url =
''.format
(self.comcode, self.num,
str(self.temp)
) ret1 = requests.get(self.kuaidi_url, headers=self.headers)
print
(ret1.text)
再建立getinfo方法用來執行爬蟲程式,num傳參用來接收快遞單號。
用post請求來獲取快遞公司id,返回乙個字典型別的字串。提取comcode的方法可能有些不專業,如果大家有更優雅的方法記得告訴我 。
獲取temp值這塊花了點時間。我檢視了jquery**,看到math.random()時我有些吃不太準。最後推測是和comcode有關,所以就用random庫山寨了乙個,結果還真的成功了……
返回的也是字典型別的字串。不知道大家會怎麼提出資料,我是用正則匹配,不知道有沒有更好的方法?
if __name__ ==
'__main__'
: num =
str(
input
("請輸入運單號:"))
kd = kuaidi100(
) kd.getinfo(num)
為了單獨使用方便,做了個「if __name__ == 『__main__』」。
結束。
import requests
import random
class
kuaidi100()
:def
__init__
(self)
: self.comcode =
"" self.temp =
"" self.url = r""
self.headers =
defgetinfo
(self, num)
: self.num = num
self.form_data =
ret = requests.post(self.url, headers=self.headers, data=self.form_data)
find_com =
(ret.text.split(
",")[2
])self.comcode = find_com[find_com.find(
'comcode')+
10:-1
] self.temp = random.random(
) self.kuaidi_url =
''.format
(self.comcode, self.num,
str(self.temp)
) ret1 = requests.get(self.kuaidi_url, headers=self.headers)
print
(ret1.text)
if __name__ ==
'__main__'
: num =
str(
input
("請輸入運單號:"))
kd = kuaidi100(
) kd.getinfo(num)
基於上述**,大家後續可以繼續優化。比如加個**池什麼的,或者做一些快遞單號返回值的判斷,用多執行緒來提高一下效率等等。
本人非碼農專業,自學python也沒多久,有不對的地方或者有好的建議還請各位前輩耐心指教,謝謝。
python實現單詞的簡單爬取
因為不需要登入之類的操作,可以說,這是對爬蟲初學者來說最簡單最基礎的乙個案例了,由於之後要用到這裡就簡單學習記錄一下。爬取目標 金山詞霸的四六級詞彙 我們可以很容易看到四個選項,六級就不列出來了。很容易拿到,且規律這麼明顯,所以說很容易。我們每次爬取單詞的時候僅需對這四個詞庫隨機選取即可。我們選擇四...
python簡單爬蟲爬取佇列的實現
deque 是雙端佇列。set 中不允許出現重複的內容。import re import urllib import urllib.request from collections import deque queue deque 待抓取的網頁 visited set 已經抓取過的網頁 url nu...
簡單爬蟲實現 爬取URL
實驗室任務詳細 寫乙個python指令碼,指令碼後面跟上乙個url的 頁面。要求 正則匹配爬蟲的方式,匹配該url網頁中的html的href標籤中的url,顯示這些url,一行乙個。首先明確什麼是 href 定義和用法 標籤的 href 屬性用於指定超連結目標的 url。href 屬性的值可以是任何...