【Python】网络爬虫-批量下载图片

本文介绍了一个使用Python进行网络爬虫的实践项目,重点讲解如何批量下载图片。涉及知识点包括BeautifulSoup模块、文件I/O操作、requests模块和urllib.request的urlretrieve()函数。通过该项目,读者可以学会从HTML文件中提取图片链接并将其保存到本地。
摘要由CSDN通过智能技术生成

Description

  • Yixiaohan/show-me-the-code 第0008题 && 第0009题 && 第0013题
  • 0008 :一个HTML文件,找出里面的正文。
  • 0009 :一个HTML文件,找出里面的链接。
  • 0013 :用 Python 写一个爬图片的程序。

Notes

这个小项目中涉及BeautifulSoup模块的使用、文件I/O操作、从网络上下载文件等内容。几个知识点:

  • requests模块的使用 && Response类对象

    1. request这个模块可以处理HTML请求,GET/POST/DELETE/PUT等都可以。
      response = requests.get(url)
      调用上述函数之后,会返回一个Response类对象。

    2. 因为不同网站的编码方式可能有所不同,所以在这个项目中显示地将response的编码方式改成utf-8。
      response.encoding = "utf-8"

    3. 得到从Response类对象的text属性得到html原文。
      html_code = response.text
      另一种得到html原文的方式如下:
      html_code = urllib.request.urlopen(url).read()

  • BeautifulSoup模块

    1. 建立BeautifulSoup对象,参数是html文件
      soup = BeautifulSoup(html_code, "html.parser")
      如果要打开本地的html文件的话,可以采用如下方式:
      soup = BeautifulSoup(open('index.html'))

    2. 找到想爬的内容,比如要找到全部的连接:
      links = soup.findAll('a')
      如果要找到每个’a’标签中的纯链接部分,可以采用get()函数,挑选想要的属性:
      print(link.get('href'))
      如果要得到链接的文字部分,可以采用:
      print(link.string)

    3. findAll()函数加其他限制条件,比如只挑选某一个class的img:
      imgs = soup.findAll('img', {'class' : "BDE_Image"})

  • 用python从网上下载文件
    用urllib.request模块的urlretrieve()函数。
    urllib.request.urlretrieve(src, fileName)

My Code

"""
* 0008 && 0009 && 0013
  by VegB
  2017/1/26
"""

from bs4 import BeautifulSoup
import requests
import urllib.request

"""
request这个模块可以处理HTML请求,GET/POST/DELETE/PUT等都可以
调用上述函数之后,会返回一个Response类对象
"""

raw_url = "http://tieba.baidu.com/p/4945979003?see_lz=1&pn="
cnt = 0

for pageNum in range(1, 2):
    url = raw_url + str(pageNum)

    response = requests.get(url)
    response.encoding = "utf-8" 
    # 原来百度的编码方式可能是gb2312啥的 windows的编码方式是gbk,用gbk的方式去解释就会出问题,还是设置为utf-8好了
    # print(response.text)

    html_code = response.text; # Response类对象的text属性,得到html原文
    soup = BeautifulSoup(html_code, "html.parser")

    # websiteCode = urllib.request.urlopen(url).read()
    # soup = BeautifulSoup(websiteCode, "html.parser") # 建立一个BeautifulSoup对象,参数是html文件 或者BeautifulSoup(open('index.html'))

    # 爬链接
    # 输出到文件?
    """
    links = []
    links = soup.findAll('a')
    cnt = 0; 
    for link in links:
        print("LINK %d:", cnt)
        print(link.get('href'))
        print(link.string)
        cnt += 1
    """

    # 下载图片
    imgs = []
    imgs = soup.findAll('img', {'class' : "BDE_Image"}) # 定好类名,不要那些广告的图片
    for img in imgs:
        src = img.get('src')
        print("IMAGE %d:"%cnt)
        print(src)
        fileName = str(cnt) + ".jpg"
        urllib.request.urlretrieve(src, fileName)
        cnt += 1

    pageNum += 1


# 找正文并写入文件
url = "http://162.105.146.180:8130/" # 爬自己写的网站好了哈哈哈
response = requests.get(url)
response.encoding = 'utf-8'
html_code = response.text

soup = BeautifulSoup(html_code)
html_body = soup.findAll('body')
print(html_body)

fp = open('html_body.txt','w')
for li
fp.close()

Result

利用这个小项目就能轻松地从贴吧中批量下载壁纸啦。
比如我们想要下载【壁纸】黑白简约壁纸这个帖子里面的壁纸。

那么运行程序之后,就可以看到本地的文件夹中已经出现了想要的壁纸了!同时,也出现了html.txt文件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值