【问题标题】:Python3.7 nested loop fails to iterate correctlyPython3.7 嵌套循环无法正确迭代
【发布时间】:2019-01-14 12:08:32
【问题描述】:

我有一个使用 selenium 的 Python3 小脚本,可以从网站 (http://digesto.asamblea.gob.ni/consultas/coleccion/) 抓取旧报纸的链接,但是,我的嵌套循环无法正常运行。

它将遍历所有行以收集发布日期以将相应的 PDF 命名为 (Gaceta_Oficial_Date.pdf) 并遍历我列表中的所有链接,而不是遍历所有链接并将其命名为相同。所以第一个循环不会迭代。

但是如何让两个循环一起“工作”,以便一个循环得到第一个循环的结果呢?

这是脚本的相关部分:

import os
import datetime

new_links = ['http://digesto.asamblea.gob.ni/consultas/util/pdf.php?type=rdd&rdd=vPjrUnz0wbA%3D',
'http://digesto.asamblea.gob.ni/consultas/util/pdf.php?type=rdd&rdd=dsyx6l1Fbig%3D',
'http://digesto.asamblea.gob.ni/consultas/util/pdf.php?type=rdd&rdd=Cb64W7EHlD8%3D',
'http://digesto.asamblea.gob.ni/consultas/util/pdf.php?type=rdd&rdd=A4TKEG9x4F8%3D'] # only 4 links in list for simplification

table_id = driver.find_element(By.ID, 'tableDocCollection')
rows = table_id.find_elements_by_css_selector("tbody tr") # get all table rows

title = "Gaceta_Oficial_"
extension = ".pdf"
for row in rows:
    col = row.find_elements(By.TAG_NAME, "td")[2]
    date = col.text
    print(date)
    date = datetime.datetime.strptime(date, '%d/%m/%Y').strftime('%Y%m%d')
    filename = title + str(date) + extension
    print(filename)
    for new_link in new_links:
        print("Downloading %s" % filename)
        r = requests.get(new_link)
        open(os.path.expanduser("~/Downloads/" + filename, 'wb').write(r.content)

【问题讨论】:

  • wget 在 2019 年似乎是一个奇怪的选择,因为有 requests
  • 哪种方式更好?你能帮我解决这个问题吗,三胞胎? :)
  • 我没有详细检查过wget,所以我不能真正评论好与坏。您可能会发现找到对流行且受支持的库的支持比找到一个奇怪且可能被遗弃的旧库要容易得多。看起来wgetwget 实用程序的包装器,而requests 为您提供本机Python HTTP,让您的Python 代码有机会在会话中间处理各种回调。
  • 那我就改成 requests 了。谢谢你,三胞胎。如果你已经在上面了,你能帮我解决我的问题吗? :)

标签: python python-3.x loops selenium download


【解决方案1】:

修复了zip 的问题:

for row, new_link in zip(rows, new_links):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多