我试图使用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")
有点晚了,但可能对其他人还是有帮助的(如果不是主题初学者的话)。我通过解决同样的问题找到了解决办法
问题是
page_url
(在您的例子中)是一个列表,而不是一个字符串。原因很可能是page_url
来自argparse.parse_args()
(至少在我的情况下是这样)。 执行page_url[0]
应该是可行的,但在def get_hansard_data(page_url)
函数中这样做并不好。最好检查参数的类型,如果类型不匹配,则向函数调用方返回适当的错误可以通过调用
type(page_url)
并比较结果来检查参数的类型,例如:typen("") == type(page_url)
。我相信可能有更优雅的方式来做到这一点,但这超出了这个问题的范围相关问题 更多 >
编程相关推荐