申明 首先,import几个需要用到的包 requests在这里主要作用是向百度发送请求,也就是模仿人类的操作进行访问,有post和get两个方法,在这里我们用get方法就行。 然后,开始向百度发送请求,这里当然需要百度图片的链接,先访问一下百度图片看看链接张什么样。 剔除一些不必要的内容之后,可以长这样 不信你可以试试。 然后对url分析一下,前面的 首先,在源码页搜一下jpg(百度图片的后缀,先找到图片的链接) 把里面的 格式的链接全部找出来,这时候就需要利用正则匹配了。代码如下: 要注意,re.findall匹配出来的数据是一个列表,需要用for循环一个个的访问: 一个最最简单的爬虫写好了,但是稍微有一点点错误就会报错,没有所谓的 不算空行和注释,只有短短20行代码。果然
本文章仅供学习使用,若读者利用该方法进行违法犯罪活动与本人无关。
爬虫已经开始违法了,所以需要谨慎使用。
以下开始正文
import requests #需要用这个包向百度发送请求 import re #需要用这个包进行正则匹配 import time #休眠一下,以免给服务器造成太大压力
url栏长这样:https://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=皮卡丘
https://image.baidu.com/search/index?tn=baiduimage&word=皮卡丘
https://image.baidu.com/search/index?tn=baiduimage
肯定是固定格式,不能变的,后面的word=皮卡丘
很明显就是我们搜索的关键词。url解决了,接下去向百度发送请求。代码如下:html = requests.get(url) html.encoding = html.apparent_encoding #这里可以对需要爬取的页面查看一下源码,一般都是utf-8,但是不全是。 html = html.text #这里需要获取对应的文本,以便后面进行正则匹配操作
接下来的操作,是对源码进行操作,这里最好有一些web前端的知识,不会的话至少要回查看源码(最简单的操作就是在网址栏前面加view-source
)
随便抓一个链接出来分析一下:{"ObjURL":"https://tiebapic.baidu.com/forum/pic/item/6cad1f30e924b8998595da4079061d950b7bf6b6.jpg","ObjUrl":"https://tiebapic.baidu.com/forum/pic/item/6cad1f30e924b8998595da4079061d950b7bf6b6.jpg"
https://tiebapic.baidu.com/forum/pic/item/6cad1f30e924b8998595da4079061d950b7bf6b6.jpg
抓出来,访问一下,发现可以访问。多试几个,发现只有objURL
开头的才能访问,但是objURL
开头的也不一定能访问。不管了,先将所有的以"ObjURL":"xxxx"
urls = re.findall('"objURL":"(.*?)"',html,re.S) #导入的re包就在这里用
i = 0 for url in urls: time.sleep(3) #休眠3秒 imag = requests.get(url,timeout = 6).content #timeout代表每次request请求最多6秒,不然万一卡住了呢 if imag: with open(str(i) + '.jpg','wb') as f: print('正在下载第 %d 张图片:%s' % (i + 1,url)) f.write(imag) i += 1 else: print('链接超时,图片下载失败') print('图片下载成功')
健壮性
,怎么改进爬虫呢,将在下一篇文章进行讲解。
完整代码如下,大家可以自行体验一下:import requests import re import time url = 'https://image.baidu.com/search/index?tn=baiduimage&word=皮卡丘' html = requests.get(url) html.encoding = html.apparent_encoding html = html.text urls = re.findall('"objURL":"(.*?)"',html,re.S) i = 0 for url in urls: time.sleep(3) #休眠3秒 imag = requests.get(url,timeout = 6).content #timeout代表每次request请求最多6秒,不然万一卡住了呢 if imag: with open(str(i) + '.jpg','wb') as f: print('正在下载第 %d 张图片:%s' % (i + 1,url)) f.write(imag) i += 1 else: print('链接超时,图片下载失败') print('图片下载成功')
人生苦短,我用python
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算