我正在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]
答案 0 :(得分:4)
通过您发布的示例:
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]
因此,您想要获取的网址可能是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
但是一旦你确定了要下载的网址,就不会比你的初始网页更难:
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)
这主要是它。
您可能想要添加一些内容,但如果是这样,则必须手动添加它们。例如:
copyfile
从page
到f
而不是read
将整个内容记入内存然后write
将其输出。但那是基础。
答案 1 :(得分:3)
您可以使用python请求库,因为您有问题:http://www.python-requests.org
您可以像这样保存来自网址的文件:
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)
答案 2 :(得分:0)
使用urllib3的解决方案
strdup
然后是递归函数以获取所有文件
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')