Python3爬取网页图片(BeautifulSoup+requests+urllib.request)

Python3爬取网页图片(BeautifulSoup+requests+urllib.request)

背景

使用的第三方库

关键代码,即对应上方的第三方库

开发步骤

1.获取网页的所有的html内容

2.进行筛选处理,获取需要的的标签和属性

3.进行简单的逻辑处理,对上面获得的属性内容进行筛选,获取图片链接

4.通过命令进行爬取

全部代码

总结


  • 背景

看到一个关于小丑和蝙蝠侠的笑话,觉得很有意义,查了一下,发现源于DC漫画的《致命玩笑》。

想通过百度看看漫画内容,最终在正义联盟贴吧的一个贴子看到。

所以使用python3爬取相关图片,有时间可以看看。

  • 使用的第三方库

  1. BeautifulSoup

  2.  requests

  3. urllib.request

在开发前需要 pip install xxx 进行下载安装

  • 关键代码,即对应上方的第三方库

#request库
r = requests.get(url, timeout=30)
r.raise_for_status() #如果状态不是200,引发异常
r.encoding = 'utf-8' #无论原来用什么编码,都改成utf-8
#BeautifulSoup
soup = BeautifulSoup(htmlText,'html.parser')
#urllib.request
#参数0:资源链接 参数1:保存的位置和文件名
urllib.request.urlretrieve(listUrl[i],savePath+str(i)+".jpg")
  • 开发步骤

网页链接:

https://tieba.baidu.com/p/4574440247?see_lz=1

1.获取网页的所有的html内容

这一步就是将网页的所有的网页源码返回。

def geturlDeatil(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status() #如果状态不是200,引发异常
        r.encoding = 'utf-8' #无论原来用什么编码,都改成utf-8
        return r.text#正常的获取的结果
    except:
        return "访问网站异常"

2.进行筛选处理,获取需要的的标签和属性

Python3爬取网页图片(BeautifulSoup+requests+urllib.request)_第1张图片

可以看到,需要的图片在这个标签和属性下,所以获取所有的属性内容存入列表中

def beautyText(htmlText):
    resultList = []
    soup = BeautifulSoup(htmlText,'html.parser')
    for i in soup.find_all('img'):
        resultList.append(i.get('src'))
    return resultList

3.进行简单的逻辑处理,对上面获得的属性内容进行筛选,获取图片链接

其实通过第2步获得的属性内容,有很多是不需要的,所以对相关内容进行筛选。

def filter(listurl):
    result = []
    for i in listurl:
        if(i[-4:]==".jpg" and i[:5]=="https"):
            result.append(i)
    return result

4.通过命令进行爬取

def getPrciture(listUrl,savePath):
    for i in range(len(listUrl)):
        urllib.request.urlretrieve(listUrl[i],savePath+str(i)+".jpg")
        print("已成功下载{}张".format(i))
    print("全部下载完成")
  • 全部代码

#success
from bs4 import BeautifulSoup
import requests
import urllib.request
def geturlDeatil(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status() #如果状态不是200,引发异常
        r.encoding = 'utf-8' #无论原来用什么编码,都改成utf-8
        return r.text
    except:
        return "访问网站异常"
def beautyText(htmlText):
    resultList = []
    soup = BeautifulSoup(htmlText,'html.parser')
    for i in soup.find_all('img'):
        resultList.append(i.get('src'))
    return resultList
def filter(listurl):
    result = []
    for i in listurl:
        if(i[-4:]==".jpg" and i[:5]=="https"):
            result.append(i)
    return result
def getPrciture(listUrl,savePath):
    for i in range(len(listUrl)):
        urllib.request.urlretrieve(listUrl[i],savePath+str(i)+".jpg")
        print("已成功下载{}张".format(i))
    print("全部下载完成")
def main():
    savePath = 'D://prciture//killing_Joker//'
    url = "https://tieba.baidu.com/p/4574440247?see_lz=1"
    htmlText = geturlDeatil(url)
    listurl = beautyText(htmlText)
    result = filter(listurl)
    getPrciture(result,savePath)
main()
  • 总结

可以说是一个简单的爬取尝试了,整个开发用时不到半小时。

其实很多爬取也是基于这些步骤的,只是不同的内容,需要处理步骤,即处理细节不同而导致代码量多一点而已。

 

 

你可能感兴趣的:(#,Python)