2017-04-22 60 views
1

我是python的新手,並設法編寫一個小程序(使用python3)從網站檢索信息。我有兩個問題:迭代和python3和硒檢索信息的問題

  1. 我不知道如何告訴python等待每一步80,所以當I = 80,160,240等
  2. 我不知道如何告訴python檢索來自網站的信息總共存在多少個步驟(因爲這個頁面各不相同),請參閱下圖。在這個例子中,我可以看到圖片中260的最大數量是「硬編碼的」?我可以告訴python單獨檢索260(或其他任何數字,如果這在另一個網頁上發生變化)?
  3. 如何告知python檢查腳本啓動的當前頁面,以便它可以將頁面編號調整爲?通常我假定從第0頁開始(i = 0),但是例如,如果我從第30頁開始,我的腳本應該能夠使i = 30,或者如果我從200開始,它應該能夠調整i = 200等,然後進入while循環。

難道我明白我在煩惱什麼嗎?

enter image description here

這是僞代碼:

import time 
from selenium import webdriver 

url = input('Please, enter url: ') 

driver = webdriver.Firefox() 
driver.get(url) 

i = 0 

while i > 260: # how to determine (book 1 = 260/book 2 = 500)? 
    # do something 
    if i == 80: # each 80th page? 
     # pause 
    else: 
    # do something else 
    i = i + 1 
else: 
    quit() 
+1

你能解釋你的第3個問題嗎? –

+0

我編輯了我的第三個問題。我希望我現在更清楚。有時很難解釋想要的東西。 ;)我現在有幾次在我身邊,但我會在今天晚些時候檢查你的答案。謝謝你回答你們所有的問題! –

回答

1

1)睡眠

import time 
....  
    if i % 80 == 0: # each 80th page? 
     # Wait for 5 seconds 
     time.sleep(5) 

2)element selectors

html = driver.find_element_by_css_selector('afterInput').get_attribute('innerHTML') 

3)參數

import sys 
.... 
currentPage = sys.argv[2] 

或從源中提取(見2)

+0

非常感謝您回答,user3804188。不幸的是,元素選擇器不起作用,它給了我以下錯誤消息'selenium.common.exceptions.NoSuchElementException:消息:無法找到元素:afterInput'。 –

+1

這意味着你正在尋找的元素不在那裏。檢查你的html源代碼(driver.page_source)。 – user3804188

1

首先,如果你想知道你的i是「步」(等分)80可以使用模標誌,並檢查是否它等於0,例如:

if i % 80 == 0: 
    time.sleep(1) # One second 

其次,你需要查詢您從服務器接收的HTML,例如:

from selenium import webdriver 

url = input('Please, enter url: ') 

driver = webdriver.Firefox() 
driver.get(url) 
total_pages = driver.find_element_by_css_selector('afterInput').get_attribute('innerHTML').split()[1] # Take only the number 

編輯完成:您所要做的就是通過在您的腳本中定義一個變量/從命令行解析參數/從網站上刮取它來爲您指定i。這取決於您的實施和需求。

其他說明

我知道你對你的開始步驟,但如果你想提高你的代碼,使之更加符合Python一點我會做以下更改:

  • 使用whilei = i + 1不是Python中的常見模式,而是使用for i in range(total_pages) - 當然,您需要知道頁數(從第二個問題開始)
  • 無需調用quit(),你的腳本無論如何都會在文件末尾結束。
    • 我想你的意思是while i < 260
+0

非常感謝您的回答,或段。我寫什麼而不是'quit()'?沒有? –

+1

沒錯,最終沒有必要調用它,劇本將無論如何都會結束。 –

+0

'我在<範圍(total_pages)'時,我是否和''一樣?'?不幸的是,'total_pages'不起作用。 :/它告訴我'selenium.common.exceptions.NoSuchElementException:消息:無法找到元素:afterInput'。 –