2017-07-03 34 views
1

我正在開發一個基本上需要我去網站的項目,選擇搜索模式(名稱,年份,編號等),搜索名稱,在結果中選擇具有特定類型的那些(換句話說,過濾),選擇保存這些結果的選項而不是通過電子郵件發送它們,選擇格式以保存它們,然後通過單擊保存按鈕來下載它們。使用Python搜索/過濾/選擇/操作來自網站的數據

我的問題是,有沒有辦法使用Python程序來完成這些步驟?我只知道提取數據和下載頁面/圖像,但我想知道是否有辦法編寫一個腳本來操作數據,並執行一個人手動執行的操作,但只能進行大量的迭代。

我一直在考慮尋找URL結構,並找到一種方法來爲每個迭代生成準確的URL,但即使這樣做,我仍然因爲「保存」按鈕而卡住了,因爲我可以找不到會自動下載我想要的數據的鏈接,使用urllib2庫的函數將下載頁面,但不會下載我想要的實際文件。

關於如何解決這個問題的任何想法?任何參考/教程將非常有幫助,謝謝!

編輯:當我檢查這裏的保存按鈕是我得到: Search Button

+1

難道他們提供了一個API?如果是的話,請使用它。如果沒有,那麼你的網絡報廢方式似乎很好。我建議Python的'requests'模塊。 –

+0

使用Python'requests'和美麗的湯https://www.crummy.com/software/BeautifulSoup/ – mjsqu

+0

我推薦的webdriver –

回答

0

這將取決於該網站上有很多你的目標和他們的搜索是如何實現的。

對於一些網站,如Reddit,他們有一個開放的API,您可以在其中添加一個.json擴展名到一個URL並獲得一個JSON字符串響應,而不是純HTML。

對於使用REST API或JSON任何響應,您使用JSON模塊這樣

import json 


json_response = '{"customers":[{"name":"carlos", "age":4}, {"name":"jim", "age":5}]}' 
rdict = json.loads(json_response) 

def print_names(data): 
    for entry in data["customers"]: 
    print(entry["name"]) 

print_names(rdict) 
0

可以加載它作爲一個Python字典你應該看看美國國會圖書館的文檔開發人員。如果他們擁有API,則可以瞭解如何通過API進行搜索和過濾。這將比通過Selenium等操作瀏覽器容易得多。如果有API,那麼您可以輕鬆地擴展或縮減您的解決方案。

如果沒有API,那麼你有

  1. 使用Selenium使用瀏覽器(我更喜歡火狐)

  2. 試圖讓產生,過濾儘可能多的信息等,而不必實際通過了解他們的搜索引擎如何使用GET和POST請求來推動該頁面上的任何按鈕。例如,如果您正在尋找範圍內的書籍,請手動進行此搜索並查看網址如何更改。如果你幸運的話,你會發現你的搜索條件在URL中。使用這些信息,您可以通過訪問該URL實際進行搜索,這意味着您的程序將不必填寫表單並按下按鈕,下拉菜單等。

  3. 如果您必須通過Selenium (例如,如果你想用html,css,js文件保存整個頁面,那麼你必須按ctrl + s,然後點擊「保存」按鈕),那麼你需要找到允許你在Python中操作鍵盤的庫。 Ubuntu有這樣的庫。這些庫可以讓你按下鍵盤上的任何按鍵,甚至可以按下組合鍵。

什麼是可能的例子:

我寫了一個腳本,登錄我的網站,然後導航我一些網頁,下載該網頁上的特定鏈接,訪問每一個環節,節省每一頁,避免保存重複的頁面,並避免被捕獲(即它不像例如每分鐘訪問100頁一樣的機器人)。

整個事情花了3-4個小時的代碼,它實際上在我在我的Mac上運行的虛擬機的Ubuntu,這意味着當它在做所有的工作我可以做用我的機器工作。如果你不使用虛擬機,那麼你將不得不讓腳本運行並且不會干擾它,或者做一個更加強大的程序,IMO不值得編寫代碼,因爲你可以使用虛擬機。

相關問題