注意事项
本博客爬取的壁纸是百度网址上的图片,直接百度"壁纸",即可进入该网址。
爬取图片,主要理解的地方是:
首先通过 主站的url 获取 图片网址信息,再利用正则表达式找到各个图片的链接,接着通过 图片链接 获取 图片信息,直接下载图片。
爬虫代码
import os
import re
import urllib.request
# 打开网址,获取网址信息
def openUrl(url):
req = urllib.request.Request(url)
# 添加 header 信息
req.add_header(
'User-Agent',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
)
response = urllib.request.urlopen(req)
html = response.read()
return html
# 用正则表达式,找到图片链路
def findImgs(url):
html = openUrl(url).decode('utf-8') # 解码
# 编写正则表达式
informations = r'"objURL":"(.*?)"'
# 返回一个正则表达式对象
reg = re.compile(informations, re.S)
# 开始查找所有信息
contents_list = re.findall(reg, html)
contents = []
for content in contents_list:
contents.append(content)
return contents
# 下载图片folder为文件夹位置,img_addrs存储着图片的链路地址
def saveImgs(folder, img_addrs):
for each in img_addrs:
print(each)
filename = each.split('/')[-1]
with open(filename, 'wb') as f:
img = openUrl(each)
f.write(img)
def download(folder='IMGS'):
os.mkdir(folder)
os.chdir(folder)
url = 'http://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gbk&word=%B1%DA%D6%BD&fr=ala&ala=1&pos=0&alatpl=wallpaper&oriquery=%E5%A3%81%E7%BA%B8'
img_addrs = findImgs(url)
saveImgs(folder, img_addrs)
if __name__ == '__main__':
download()
注:
我这个代码因为比较简单,很对方面没有考虑全,故而爬到后面会被报出404错误,即被屏蔽掉了。
写这篇仅仅留下一个爬去图片的思路。