使用python3和selenium迭代和检索信息的问题

时间:2017-04-22 07:06:13

标签: python selenium selenium-webdriver

我是python的新手并设法编写一个小程序(使用python3)从网站检索信息。我有两个问题:

  1. 我不知道如何告诉python等待每个第80步,所以当我= 80,160,240等时。
  2. 我不知道如何告诉python从网站上检索信息总数中存在多少步骤(因为页面之间的不同而不同),请参见下图。我可以在图中看到,在这个例子中,最大数量260是“硬编码的”?我可以告诉python自己检索260(或者如果在另一个网页上发生变化,还可以检索任何其他数字)?
  3. 如何告诉python检查脚本启动的当前页面是哪个,以便它可以调整i到页面的编号?通常我假设从第0页开始(i = 0),但是例如,如果我从第30页开始,我的脚本应该能够使i = 30,或者如果我从200开始,它应该能够调整i = 200等在进入while循环之前。
  4. 我明白我在困扰什么?

    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()
    

2 个答案:

答案 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)

答案 1 :(得分:1)

首先,如果你想知道你的i是&#34;步骤&#34;(devision)是80,你可以使用模数符号,并检查它是否等于0,例如:< / p>

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分配您想要的值从网站上抓下来。这取决于您的实施和需求。

其他说明

我知道你已经开始了步骤,但是如果你想改进你的代码并使其更加pythonic,我会做以下更改:

  • 使用whilei = i + 1不是python中的常见模式,而是使用for i in range(total_pages) - 当然您需要知道页数(来自您的第二个问题)
  • 无需调用quit(),您的脚本无论如何都会在文件末尾结束。
    • 我认为你的意思是while i < 260