2016-05-15 18 views
-1

我检查了其他帖子,但解决方案似乎没有工作。我不断收到AttributeError:'module'对象没有属性'urlopen'错误。任何想法为什么这不起作用将不胜感激。AttributeError:'module'对象在urllib3中没有属性'urlopen'

from lxml import html 
import requests 
import urllib3 

page = requests.get('http://www.sfbos.org/index.aspx?page=18701') 
tree = html.fromstring(page.content) 

#This will create a list of buyers: 
proposal_doc_date = tree.xpath('//ul[@title="Date List"]/li/a/text()') 
pdf_url = tree.xpath('//ul[@title="Date List"]/li/a/@href') 

print 'Proposal Date ', proposal_doc_date 
print 'Proposal PDF ', pdf_url 

def download_pdf(url_list): 
    for i in url_list: 
     response = urllib3.urlopen(i) 
     file = open(proposal_doc_date[i], 'wb') 
     file.write(response.read()) 
     file.close() 
     print("Completed") 

download_pdf(pdf_url) 
+3

你已经有请求,那么你为什么使用urllib3? –

+0

我对此很新,所以也许这是一件愚蠢的事情。你会如何推荐使用请求下载PDF文件? – tonestrike

+2

反正,urllib3在模块上没有urlopen。您可以参考文档以了解正确的用法。 Urllib2的确如此。 https://urllib3.readthedocs.io/en/latest/ –

回答

0

你导入这两种requestsurllib3用于相同目的(请求建立在urllib3的顶部) 。以下是如何做到这一点使用要求:

import requests 

# ... 

http = requests.Session() 

def download_pdf(url_list): 
    for i in url_list: 
     response = http.get(i) 
     file = open(proposal_doc_date[i], 'wb') 
     file.write(response.content) 
     file.close() 
     print("Completed") 

而类似的情况在urllib3:

import urllib3 

# ... 

http = urllib3.PoolManager() 

def download_pdf(url_list): 
    for i in url_list: 
     response = http.request('GET', i) 
     file = open(proposal_doc_date[i], 'wb') 
     file.write(response.read()) 
     file.close() 
     print("Completed") 

还有各种其他的东西,你可以用流媒体的要求做,并写入文件,因为它的响应流。查看更多相关项目的文档。