Python3爬取网页图片(BeautifulSoup+requests+urllib.request)
背景
使用的第三方库
关键代码,即对应上方的第三方库
开发步骤
1.获取网页的所有的html内容
2.进行筛选处理,获取需要的的标签和属性
3.进行简单的逻辑处理,对上面获得的属性内容进行筛选,获取图片链接
4.通过命令进行爬取
全部代码
总结
看到一个关于小丑和蝙蝠侠的笑话,觉得很有意义,查了一下,发现源于DC漫画的《致命玩笑》。
想通过百度看看漫画内容,最终在正义联盟贴吧的一个贴子看到。
所以使用python3爬取相关图片,有时间可以看看。
BeautifulSoup
requests
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
这一步就是将网页的所有的网页源码返回。
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
其实通过第2步获得的属性内容,有很多是不需要的,所以对相关内容进行筛选。
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("全部下载完成")
#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()
可以说是一个简单的爬取尝试了,整个开发用时不到半小时。
其实很多爬取也是基于这些步骤的,只是不同的内容,需要处理步骤,即处理细节不同而导致代码量多一点而已。