下载文件 | 爬虫入门 (待更。。。)

  • 使用 urlretrieve
from urllib.request import urlretrieve
IMAGE_URL = "https://morvanzhou.github.io/static/img/description/learning_step_flowchart.png"
FILE_URL = "./img/image1.png"
urlretrieve(IMAGE_URL, FILE_URL)
  • 使用 request
    如果要下载的是大文件, 比如视频等. requests 能下一点, 保存一点, 而不是要全部下载完才能保存去另外的地方. 这就是一个 chunk 一个 chunk 的下载. 使用 r.iter_content(chunk_size) 来控制每个 chunk 的大小, 然后在文件中写入这个 chunk 大小的数据.
r = requests.get(IMAGE_URL, stream=True)    # stream loading

with open('./img/image3.png', 'wb') as f:#with open也是打开文件的一种方法,wh是用二进制打开;with open省去了文件的关闭操作,更加方便
    for chunk in r.iter_content(chunk_size=32):
        f.write(chunk)
  • 小练习:下载美图

    规律:图片链接都存在于 img_list 的这种
      中。
      做法:先找带有 img_list 的这种
        , 然后在
          里面找 .
        from bs4 import BeautifulSoup
        import requests
        URL = "http://www.nationalgeographic.com.cn/animals/"
        html = requests.get(URL).text
        soup = BeautifulSoup(html, 'lxml')
        img_ul = soup.find_all('ul', {"class": "img_list"})
        for ul in img_ul:
            print(ul)
            print("------------------------")
        for ul in img_ul:
            imgs = ul.find_all('img')
            for img in imgs:
                url = img['src']
                r = requests.get(url, stream = True)
                image_name = url.split('/')[-1]
                with open('./img/%s' % image_name, 'wb') as f:
                    for chunk in r.iter_content(chunk_size=128):
                        f.write(chunk)
                print("saved %s" % image_name)