python爬取百度图片代码,Python爬虫爬取网站图片代码
爬虫发起请求的基本流程:通过HTTP库向目标站点发送请求,请求中可以包含额外的头等信息,等待服务器响应得到响应内容:如果服务器能正常响应,就会得到响应,响应的内容就是要获取的页面内容,可能是HTML,也可能是JSON字符串。二进制数据(图片或视频)等类型解析内容:获取的内容可能是HTML,可以通过正则表达式和页面解析库进行解析,Json,可以直接转化为Json对象解析,也可能是二进制数据,可以保存或进一步处理。保存数据:以各种形式保存,可以保存为文本,或保存在数据库中,或保存特定格式的文件。1.百度图片爬虫这里有一招,百度
对于百度图片的网址,普通爬虫只会接收到非滚轮前界面显示的所有信息。
所以这里有个小技巧,比如上图红框中的信息索引。在这里用字符flip代替index可以实现图片的分页。但实际上所有分页的图片都存在于一个接口中,也就是说爬虫不需要处理分页。
实现代码如下:import re
导入请求
导入操作系统
# 1.获取网址
Word=input(想看有颜色的图片,请输入:)
如果不是os.path.exists(word):
os.mkdir(word)
URL= https://image . Baidu . com/search/flip?TN=baiduimage PS=1 CT=201326592 lm=-1 cl=2 NC=1 ie=utf-8 word= word
head={ User-Agent : Mozilla/5.0(Macintosh;英特尔Mac OS X 10 _ 15 _ 7)apple WebKit/537.36(KHTML,像壁虎一样)Chrome/91 . 0 . 4472 . 164 Safari/537.36 }
# 2.获取网页源代码
r=requests.get(url,headers=head)
# response [200] 200状态代码请求成功。
#ret=r.text #ret获取网页的源代码。
Ret=R .内容。decode(‘UTF-8’)# ret获取网页源代码。
# 3.获取所有图片的网址
#objURL
result=re . find all( objURL :(。*?),,ret)
# 4.保存所有图片
因为我的结果是:
尝试:
r=requests.get(i,timeout=3)
例外情况为e:
打印(e)
继续
#拍些照片。拍50张照片
path=i[0:50]
#确定url的最后10位数字是否是图片类型的结尾
end=re.search(r\)。jpg$\。jpeg$\。gif$\。png$ ,路径)
如果end==None:
路径=路径。 jpg
打印(路径)
path=re sub(/,,path)
以open(word / path, wb )为f:
在f.write(r.content)代码中,输入你想要的关键词,修改想要的图片号参数,就可以下载相应的图片。
2.网站图片
这类专门的图片网站通常包含每张图片的分页选项和链接,对应图片的详情页,其中详情页通常包含多张图片。
因此,爬虫不仅需要处理分页,还需要处理并获取每个页面每个链接下的详细界面。
实现代码如下:导入os
有35页。
http://ailuotuku.com/page_1.html
从4导入美汤#网页分析
导入#常规匹配
导入urllib.request,urllib.error #开发url
导入请求
#创建正则表达式对象来表示规则
#图片链接
findlink=re.compile(r a href=(。*?) target=_blank )
#图片标题
findtitle=re.compile(r h1(。*?)/h1’)
#图片
findimg=re.compile(r img。*?src=(。*?).*? ,回复。s)
#爬升数据
def getdata():
#1.调用函数获取页面
对于范围内的I(1.36):
URL= http://ailuotuku . com/page _ % s . html % I
html1=askURL(url)
#2.解析数据
soup1=BeautifulSoup(html1,“html.parser”)
对于soup1.find_all(div ,class_=update_area_content ):
item1=str(item1)
#re库查找正则表达式
link=re.findall(findlink,item1)
对于链接中的j:
j=str(j)
html 2=askul(j)
soup2=BeautifulSoup(html2,“html.parser”)
data_title=[]
data_img=[]
对于soup2.find_all(div ,class_=main_left single_mian ):
item2=str(item2)
title=re.findall(findtitle,item2)
对于soup2.find_all(div ,class_=content_left )中的item3:
item3=str(item3)
image=re.findall(findimg,item3)
对于图像中的img:
数据_img .追加(img)
打印(标题)
打印(数据_图像)
#保存图片
对于标题中的文件名:
对于数据_img中的网址:
file=url.split(/)[-1]
head={
用户代理:‘Mozilla/5.0(麦金塔;英特尔Mac OS X 10 _ 15 _ 7)苹果WebKit/537.36(KHTML像壁虎)Chrome/92。0 .4515 .93 Safari/537.36 }
response=requests.get(url,headers=head)
如果不是OS。路径。存在( data/% s % filename):
os.mkdir(data/%s%filename)
用打开( data/%s/%filename文件, wb )作为女:
f .写(响应。内容)
否则:
及格
def askURL(url):
head={ User-Agent : Mozilla/5.0(Macintosh;英特尔Mac OS X 10 _ 15 _ 7)苹果WebKit/537.36(KHTML像壁虎)Chrome/92。0 .4515 .93 Safari/537.36 }
#伪装浏览器
请求=URL库。请求。请求(URL,headers=head)
html=
尝试:
响应=urllib。请求。urlopen(请求)
html=response.read().解码(“utf-8”)
除了urllib.error.URLError作为e:
如果hasattr(e,代码):
打印(电子代码)
if hasattr(e, reason ):
打印(原因)
返回超文本标记语言
def main():
data=getdata()
if __name__==__main__ :
主()
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。