我正在用python构建爬虫,我有来自页面的href列表。
现在我有了要下载的文件扩展名列表,如下所示
list = ['zip','rar','pdf','mp3']
如何使用python将该url中的文件保存到本地目录?
编辑:
import urllib2
from bs4 import BeautifulSoup
url = "http://www.example.com/downlaod"
site = urllib2.urlopen(url)
html = site.read()
soup = BeautifulSoup(html)
list_urls = soup.find_all('a')
print list_urls[6]发布于 2013-05-04 06:48:45
按照你发布的例子:
import urllib2
from bs4 import BeautifulSoup
url = "http://www.example.com/downlaod"
site = urllib2.urlopen(url)
html = site.read()
soup = BeautifulSoup(html)
list_urls = soup.find_all('a')
print list_urls[6]因此,您下一步要获取的URL可能是list_urls[6]['href']。
第一个技巧是,这可能是一个相对URL,而不是绝对URL。所以:
newurl = list_urls[6]['href']
absurl = urlparse.urljoin(site.url, newurl)此外,如果文件具有正确的扩展名,则只希望获取该文件,因此:
if not absurl.endswith(extensions):
return # or break or whatever但是一旦你决定了你想要下载的URL,它就不会比你最初的抓取更难了:
page = urllib2.urlopen(absurl)
html = page.read()
path = urlparse.urlparse(absurl).path
name = os.path.basename(path)
with open(name, 'wb') as f:
f.write(html)基本上就是这样。
您可能需要添加一些内容,但如果是这样的话,您必须手动添加所有内容。例如:
page到f的URL,而不是将整个内容read到内存中,然后将其write出来。但这是最基本的。
发布于 2014-01-13 16:33:58
您可以使用python请求库,正如您所问的那样:http://www.python-requests.org
你可以像这样从url中保存文件:
import requests
url='http://i.stack.imgur.com/0LJdh.jpg'
data=requests.get(url).content
filename="image.jpg"
with open(filename, 'wb') as f:
f.write(data)发布于 2018-09-19 00:25:51
使用urllib3的解决方案
import os
import urllib3
from bs4 import BeautifulSoup
import urllib.parse
url = "https://path/site"
site = urllib3.PoolManager()
html = site.request('GET', url)
soup = BeautifulSoup(html.data, "lxml")
list_urls = soup.find_all('a')然后使用递归函数来获取所有文件
def recursive_function(list_urls)
newurl = list_urls[0]['href']
absurl = url+newurl
list_urls.pop(0)
if absurl.endswith(extensions): # verify if contains the targeted extensions
page = urllib3.PoolManager()
html = site.request('GET', absurl)
name = os.path.basename(absurl)
with open(name, 'wb') as f:
f.write(html.data)
return recursive_function(list_urls)https://stackoverflow.com/questions/16368466
复制相似问题