如何在不对任何数字进行硬编码的情况下自动执行爬网?

时间:2017-07-06 12:02:08

标签: python-3.x selenium selenium-webdriver web-scraping web-crawler

我已经使用python和selenium编写了一个脚本来从网页上删除餐馆名称。如果我硬编码我要解析的数量,它工作得很好。该页面具有延迟加载过程,并在每个滚动中显示40个名称。但是,我的脚本可以处理它。我想在脚本中改进的唯一一点是我不想对数字进行硬编码;相反,我想让它检测自己有多少并成功解析它。希望有人帮忙。这是代码:

from selenium import webdriver
import time

driver = webdriver.Chrome()

driver.get('https://www.yellowpages.ca/search/si/1/pizza/Toronto')

while True:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)

    links = [posts.text for posts in driver.find_elements_by_xpath("//div[@itemprop='itemListElement']//h3[@itemprop='name']/a")]

    if (len(links) == 240):
            break

for link in links:
    print(link)

driver.quit()

1 个答案:

答案 0 :(得分:1)

您可以检查上一次迭代中链接的数量是否已更改

num_Of_links = -1
num = 0
while num != num_Of_links:
    num_Of_links = num
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)

    links = [posts.text for posts in driver.find_elements_by_xpath("//div[@itemprop='itemListElement']//h3[@itemprop='name']/a")]
    num = len(links)