2016-05-12 17 views
1

我有一個路由器,我想登錄並使用Python腳本檢索信息。我是Python的新手,但想學習和探索更多。以下是我迄今寫:路由器訪問 - 美麗的湯 - Python 3.5

from requests.auth import HTTPBasicAuth 
import requests 
from bs4 import BeautifulSoup 

response = requests.get('http://192.168.1.1/Settings.html/', auth=HTTPBasicAuth('Username', 'Password')) 
html = response.content 

soup = BeautifulSoup(html, "html.parser") 
print (soup.prettify()) 

我有兩個問題:

當我運行該腳本的第一次,我收到一個身份驗證錯誤。在第二次運行腳本時,它似乎可以正確驗證並檢索HTML。有更好的方法嗎?

與BS我只想從腳本中檢索我需要的代碼。我不能看到一個標籤來設置BS刮。在HTML開始有這些我想刮的數據,例如變量列表:

var Device Pin = '12345678'; 

它更容易檢索使用單一的腳本,而不是登錄到Web界面每次信息。它位於script type =「text/javascript」中。

BS是該工作的正確工具。我可以在變量列表中刮一行嗎?

任何幫助一如既往非常讚賞。

回答

0

據我所知,BeautifulSoup不處理JavaScript。在這種情況下,這是很簡單,只需使用正則表達式

import re 
m = re.search(r"var Device Pin\s+= '(\d+)'", html) 
pin = m.group(1) 

關於認證問題,你可以用你的電話try except重做通話,如果它不工作的第一次。

0

我會運行一個包嗅探器,tcpdump或wireshark,以查看您的腳本和您的路由器之間的交互。查看交互可能有助於確定您無法在第一次通過時進行身份驗證的原因。作爲一種解決方法,在for循環中運行auth部分,在失敗前將嘗試N次驗證。

關於抓取,你可能要考慮lxml與美麗的湯解析器,所以你可以使用XPath。請參閱can we use xpath with BeautifulSoup?

如果lxml可以解析它,XPath將允許您輕鬆地從html中提取單個值,文本,屬性等。