python爬虫实例(百度图片、网站图片)(用python爬取网站图片)

网友投稿 931 2022-08-27


python爬虫实例(百度图片、网站图片)(用python爬取网站图片)

爬虫基本流程

发起请求:通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的header等信息,等待服务器响应获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能是HTML,Json字符串,二进制数据(图片或者视频)等类型解析内容:得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析,可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理保存数据:保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件

1.百度图片爬虫

在这里有一个小技巧,百度图片展示是下拉式的,要想看更多的图片,需要滑动滚轮让界面加载才可以查看。

普通的爬虫对于百度图片的url只会接受到未滚动滚轮前界面所展示的所有信息

实现代码如下

import reimport requestsimport os# 1.拿到urlword=input('你想看有颜色的图片吗,请输入:')if not os.path.exists(word): os.mkdir(word)url="(Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36"}# 2.得到网页源代码r=requests.get(url,headers=head) # 200状态码 请求成功#ret=r.text #ret 得到就是网页源代码ret=r.content.decode('utf-8') #ret 得到就是网页源代码 # 3.拿到所有图片的url #"objURL"result=re.findall('"objURL":"(.*?)",',ret) # 4.保存所有图片for i in result: try: r = requests.get(i,timeout=3) except Exception as e: print(e) continue #取几张图片。取50张 path = i[0:50] #判断url后10位是否是图片类型的结尾 end=re.search(r'\.jpg$|\.jpeg$|\.gif$|\.png$',path) if end ==None: path = path + '.jpg' print(path) path= re.sub('/','',path) with open(word + '/' + path,'wb') as f: f.write(r.content)

代码中可以通过输入自己想要的关键词,修改想要的图片数量参数,来下载对应的图片

2.网站图片

这种专门的图片网站,通常包含分页选项,以及每个图片的链接,对应到图片的详细页面,其中详细界面通常包含1张以上的图片。因此爬虫不仅需要对分页做处理,同时需要对每一个页的每一个链接下的详细界面做处理获取

实现代码如下:

import os'''页面一共35bs4 import BeautifulSoup#网页解析import re #正则匹配import urllib.request,urllib.error #制定urlimport requests#创建正则表达式对象,表示规则#图片链接findlink=re.compile(r'')#图片标题findtitle=re.compile(r'

(.*?)

')#图片findimg=re.compile(r'',re.S)#爬数据def getdata(): #1.调用获取页面的函数 for i in range(1,36): url=" html1=askURL(url) #2.解析数据 soup1=BeautifulSoup(html1,"html.parser") for item1 in soup1.find_all('div',class_="update_area_content"): item1=str(item1) #re库查找正则表达式 link=re.findall(findlink,item1) for j in link: j=str(j) html2 = askURL(j) soup2 = BeautifulSoup(html2, "html.parser") data_title=[] data_img=[] for item2 in soup2.find_all('div', class_="main_left single_mian"): item2=str(item2) title=re.findall(findtitle,item2) for item3 in soup2.find_all('div',class_='content_left'): item3=str(item3) image=re.findall(findimg,item3) for img in image: data_img.append(img) print(title) print(data_img) #保存图片 for filename in title: for url in data_img: file=url.split('/')[-1] head = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.93 Safari/537.36"} response = requests.get(url, headers=head) if not os.path.exists('data/%s'%filename): os.mkdir('data/%s'%filename) with open('data/%s/'%filename + file, 'wb') as f: f.write(response.content) else: passdef askURL(url): head={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.93 Safari/537.36"} #伪装浏览器 request=urllib.request.Request(url,headers=head) html="" try: response=urllib.request.urlopen(request) html=response.read().decode("utf-8") except urllib.error.URLError as e: if hasattr(e,"code"): print(e.code) if hasattr(e,"reason"): print(e.reason) return htmldef main(): data=getdata()if __name__ =="__main__": main()


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python pandas时间操作函数
下一篇:解决SpringBoot引用别的模块无法注入的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~