2015-06-26 88 views
-1

我使用mechanize庫登錄網站。我查過了,效果很好。但問題是我不能使用response.read()BeautifulSoup和'lxml'。爲什麼BeautifulSoup和lxml不起作用?

#BeautifulSoup 
response = browser.open(url) 
source = response.read() 
soup = BeautifulSoup(source) #source.txt doesn't work either 
for link in soup.findAll('a', {'class':'someClass'}): 
    some_list.add(link) 

這不起作用,實際上沒有找到任何標籤。它適用於我使用requests.get(url)

#lxml->html 
response = browser.open(url) 
source = response.read() 
tree = html.fromstring(source) #souce.txt doesn't work either 
print tree.text 
like_pages = buyers = tree.xpath('//a[@class="UFINoWrap"]') #/text() doesn't work either 
print like_pages 

不打印任何東西。我知道它的退貨類型爲response,因爲它與requests.open()配合良好。我能做什麼?您能否提供示例代碼,其中response.read()用於html解析?

順便說一下,responserequests對象有什麼區別?

謝謝!

回答

0

我找到了解決辦法。這是因爲mechanize.browser是模擬瀏覽器,並且它只獲取原始html。我想抓取的頁面在JavaScript的幫助下將類添加到標記中,因此這些類不在原始html上。最好的選擇是使用webdriver。我使用Selenium for Python。這裏是代碼:

from selenium import webdriver 

profile = webdriver.FirefoxProfile() 
profile.set_preference('network.http.phishy-userpass-length', 255) 
driver = webdriver.Firefox(firefox_profile=profile) 

driver.get(url) 
list = driver.find_elements_by_xpath('//a[@class="someClass"]') 

注意:您需要安裝Firefox。或者您可以根據您要使用的瀏覽器選擇其他配置文件。


請求是什麼web客戶端發送到服務器,用什麼URL的客戶想要的,用什麼HTTP動詞(GET/POST等)的詳細信息,如果您提交的是形成請求通常包含您在表單中輸入的數據。 響應是Web服務器回覆客戶請求時發回的內容。響應中有一個狀態代碼,用於指示請求是否成功(代碼200通常是沒有問題的,或者代碼錯誤代碼是404或500)。響應通常包含數據,如頁面中的html,或者jpeg中的二進制數據。響應還包含標題,其中提供了有關響應中的數據的更多信息(例如,表示數據所在格式的「Content-Type」標題)。

這個link從@ davidbuxton的回答引用。

祝你好運!

相關問題