从网站下载文件列表
Downloading a list of files from a website
我有一个特定要求,需要从网站下载超过 100 个文件。我想下载所有这些文件,但文件名不连续(例如 www.blah.com/1 , www.blah.com/3, www.blah.com/4, www.blah.com/10).我想遍历整个序列,如果 link 不可用则跳过。在 python 中最有效的方法是什么?
假设您有一个正常的 TCP/IP 连接,下面的代码可能有用
import urllib2
def download(link, filename):
try:
req=urllib2.urlopen(link)
except urllib2.HTTPError:
pass
if req.has_data():
open(filename,"wb").write(req.get_data())
#here goes your function that loops over
uri="http://example.com/"
for x in xrange(1, 101):
download(uri+str(x), str(x))
只是一个例子。随意修改
您可能需要查看 Scrapy
网页抓取框架。
默认情况下,如果响应状态代码为 4xx 或 5xx,Scrapy
将跳过页面。
你应该从这些方面着手:
import scrapy
class MySpider(scrapy.Spider):
name = "my_spider"
allowed_domains = ["domain.com"]
def start_requests(self)
for page in xrange(100):
yield scrapy.Request("http://domain.com/page/{page}".format(page=page))
def parse(self, response):
# TODO: parse page
此外,请确保您是一名优秀的网络抓取公民,请参阅:
- Web scraping etiquette
- How to be a good citizen when crawling web sites?
我有一个特定要求,需要从网站下载超过 100 个文件。我想下载所有这些文件,但文件名不连续(例如 www.blah.com/1 , www.blah.com/3, www.blah.com/4, www.blah.com/10).我想遍历整个序列,如果 link 不可用则跳过。在 python 中最有效的方法是什么?
假设您有一个正常的 TCP/IP 连接,下面的代码可能有用
import urllib2
def download(link, filename):
try:
req=urllib2.urlopen(link)
except urllib2.HTTPError:
pass
if req.has_data():
open(filename,"wb").write(req.get_data())
#here goes your function that loops over
uri="http://example.com/"
for x in xrange(1, 101):
download(uri+str(x), str(x))
只是一个例子。随意修改
您可能需要查看 Scrapy
网页抓取框架。
默认情况下,如果响应状态代码为 4xx 或 5xx,Scrapy
将跳过页面。
你应该从这些方面着手:
import scrapy
class MySpider(scrapy.Spider):
name = "my_spider"
allowed_domains = ["domain.com"]
def start_requests(self)
for page in xrange(100):
yield scrapy.Request("http://domain.com/page/{page}".format(page=page))
def parse(self, response):
# TODO: parse page
此外,请确保您是一名优秀的网络抓取公民,请参阅:
- Web scraping etiquette
- How to be a good citizen when crawling web sites?