• 写一个简单的python爬虫程序,爬取一下百度图片


    申明
    本文章仅供学习使用,若读者利用该方法进行违法犯罪活动与本人无关。
    爬虫已经开始违法了,所以需要谨慎使用。
    以下开始正文


    首先,import几个需要用到的包

    import requests        #需要用这个包向百度发送请求
    import re              #需要用这个包进行正则匹配
    import time            #休眠一下,以免给服务器造成太大压力
    

    requests在这里主要作用是向百度发送请求,也就是模仿人类的操作进行访问,有post和get两个方法,在这里我们用get方法就行。

    然后,开始向百度发送请求,这里当然需要百度图片的链接,先访问一下百度图片看看链接张什么样。在这里插入图片描述
    url栏长这样:

    http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=皮卡丘
    

    剔除一些不必要的内容之后,可以长这样

    http://image.baidu.com/search/index?tn=baiduimage&word=皮卡丘
    

    不信你可以试试。

    然后对url分析一下,前面的http://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

    首先,在源码页搜一下jpg(百度图片的后缀,先找到图片的链接)
    在这里插入图片描述
    随便抓一个链接出来分析一下:

    {"ObjURL":"http://tiebapic.baidu.com/forum/pic/item/6cad1f30e924b8998595da4079061d950b7bf6b6.jpg","ObjUrl":"http://tiebapic.baidu.com/forum/pic/item/6cad1f30e924b8998595da4079061d950b7bf6b6.jpg"
    

    把里面的http://tiebapic.baidu.com/forum/pic/item/6cad1f30e924b8998595da4079061d950b7bf6b6.jpg抓出来,访问一下,发现可以访问。多试几个,发现只有objURL开头的才能访问,但是objURL开头的也不一定能访问。不管了,先将所有的以

    "ObjURL":"xxxx"
    

    格式的链接全部找出来,这时候就需要利用正则匹配了。代码如下:

    urls = re.findall('"objURL":"(.*?)"',html,re.S)    #导入的re包就在这里用
    

    要注意,re.findall匹配出来的数据是一个列表,需要用for循环一个个的访问:

    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 = 'http://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('图片下载成功')
    
    

    注意:最后送大家一套2020最新企业Pyhon项目实战视频教程,点击此处 进来获取 跟着练习下,希望大家一起进步哦!

  • 相关阅读:
    「10.10」神炎皇(欧拉函数)·降雷皇(线段树,DP)·幻魔皇
    「10.8」simple「数学」·walk「树上直径」
    10.5「嘟嘟噜」·「天才绅士少女助手克里斯蒂娜」·「凤凰院凶真」
    csp-s模拟测试59(10.4)「Reverse」(set)·「Silhouette」(容斥)
    csp-s模拟测试58「Divisors」·「Market」·「Dash Speed」
    csp-s模拟测试57(10.2)「天空龙」·「巨神兵」·「太阳神」
    csp-s模拟测试56(10.2)Merchant「二分」·Equation「树状数组」
    csp-s模拟测试55(9.29)联「线段树」·赛「??」题「神仙DP」
    消防(树上直径)
    模拟测试65
  • 原文地址:https://www.cnblogs.com/shenjuxian/p/13702763.html
Copyright © 2020-2023  润新知