Python笔记:爬虫下载图片的基本思路(requests就能搞定)

一、先上结论

  • 只要找到每个图片对应的链接,就一定能够下载它。
  • 用到的主要函数request()(中文说明文档链接), re.findall()(官方文档链接)。

二、再说步骤:

A、How、Where找到图片链接?
  • 每张图片都有自己对应的链接。在浏览器中,按F12,在火狐的查看器或者Chorme的elements。见下边例子:
B、用代码How把我们想要的链接提取出来呢?
  • 使用正则表达式 .findall()
C、提取出来链接后How下载到本地呢?
  • open()write()函数

三、最后案例

Python笔记:爬虫下载图片的基本思路(requests就能搞定)_第1张图片

"""案例代码"""
import requests
import re

# 输入我们的网站地址
url = 'http://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=%E5%9B%BE%E7%89%87&step_word=&hs=0&pn=2&spn=0&di=181197009070&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=0&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=undefined&cs=4075680052%2C587526839&os=46658057%2C248100521&simid=0%2C0&adpicid=0&lpn=0&ln=1612&fr=&fmq=1557668430731_R&fm=&ic=undefined&s=undefined&hd=undefined&latest=undefined©right=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=http%3A%2F%2Fpic18.nipic.com%2F20111213%2F8791344_093424951000_2.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bgtrtv_z%26e3Bv54AzdH3Ffi5oAzdH3F8AzdH3FdcAzdH3Fc9lac8lh0aa810cc_z%26e3Bip4s&gsm=0&rpstart=0&rpnum=0&islist=&querylist=&force=undefined'

req = requests.get(url)    # 用代码获取网页
txt = req.text             # req.text : 返回文本形式url的内容,相当于文本形式的HTML

# 使用正则表达式提取目标链接。具体是先人工看看该网站url的特点,再确定具体的正则pattern
links = re.findall(r'src="(.*2\.jpg)"', txt)  # 关于正则表达式见官网 https://docs.python.org/3/library/re.html

for link in links:
    req = requests.get(link)            # 把提取出来的链接,全部打开
    pic = req.content                   # 并返回2进制形式的link的非文本部分,相当于2进制形式的HTML非文本部分
    
    path='e:/pictures/baidutupian.jpg'  # 假设已经在e盘创建了文件夹“pictures”
    with open(path, 'wb') as f:         # 更多见下边的备注
        f.write(pic)

备注:

1. with open(path, 'wb') as f

wb:即以二进制的形式进行操作。如果文件不存在,则创建;如果存在,则先删除(并复写)已有数据;(附注链接:r、w、a、rb、wb、ab +的区别)

2. 如果是文件夹不存在,怎么自动创建?
# 检测是否存在 e:/picutres,如果存在、略过,否则创建
if not os.path.exist('e:/pictures'):  
    os.makedirs('e:/pictures')
3. 如果print(req.text)里边是乱码怎么办?

可以使用req.encoding = req.apparent_encoding:自动返回并使用网页里边的编码格式,没有乱码。

你可能感兴趣的:(爬虫)