【问题标题】:'list' object has no attribute 'timeout'“列表”对象没有属性“超时”
【发布时间】:2016-11-02 20:34:46
【问题描述】:

我正在尝试使用urllib.request.urlopen 从页面下载 Pdf,但它返回错误:'list' object has no attribute 'timeout'

def get_hansard_data(page_url):
    #Read base_url into Beautiful soup Object
    html = urllib.request.urlopen(page_url).read()
    soup = BeautifulSoup(html, "html.parser")
    #grab <div class="itemContainer"> that hold links and dates to all hansard pdfs
    hansard_menu = soup.find_all("div","itemContainer")

    #Get all hansards
    #write to a tsv file
    with open("hansards.tsv","a") as f:
        fieldnames = ("date","hansard_url")
        output = csv.writer(f, delimiter="\t")

        for div in hansard_menu:
            hansard_link = [HANSARD_URL + div.a["href"]]
            hansard_date = div.find("h3", "catItemTitle").string

            #download
            
            with urllib.request.urlopen(hansard_link) as response:
                data = response.read()
                r = open("/Users/Parliament Hansards/"+hansard_date +".txt","wb")
                r.write(data)
                r.close()

            print(hansard_date)
            print(hansard_link)
            output.writerow([hansard_date,hansard_link])
        print ("Done Writing File")

【问题讨论】:

  • 错误出现在哪一行?你用的是什么版本的 Python?
  • 你能给我们堆栈跟踪吗?您发布的代码不包含超时调用,因此很难找到
  • 版本:Python 3.4。此行发生错误:使用 urllib.request.urlopen(hansard_link) 作为响应:

标签: python python-3.x beautifulsoup


【解决方案1】:

有点晚了,但可能仍然对其他人有所帮助(如果不是主题启动者)。我通过解决同样的问题找到了解决方案。

问题在于page_url(在您的情况下)是一个列表,而不是一个字符串。其原因很可能是page_url 来自argparse.parse_args()(至少在我的情况下是这样)。 执行page_url[0] 应该可以,但在def get_hansard_data(page_url) 函数中这样做并不好。最好检查参数的类型,如果类型不匹配,则向函数调用者返回适当的错误。

可以通过调用type(page_url) 并比较结果来检查参数的类型,例如:typen("") == type(page_url)。我相信可能有更优雅的方法可以做到这一点,但这超出了这个特定问题的范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多