网页爬虫抓取百度图片(强度不算很大,其实都是之前做过的事情,主要是用BS4来爬取网页图片)

优采云 发布时间: 2022-04-06 10:00

  网页爬虫抓取百度图片(强度不算很大,其实都是之前做过的事情,主要是用BS4来爬取网页图片)

  今天的力度不是很大,其实之前都做过,主要是用BS4中的Beautifulsoup爬取网页图片。因为老师用了漂亮的图库,但是我们不能再用了,所以我在百度上找了一张桌面壁纸网站,呵呵,我喜欢DOTA2的壁纸。

  #1.拿到主页面的源代码,然后提取到子页面的链接href

#2.通过href拿到子页面的内容,然后找到下载链接,进行下载 “img里面src的值就是下载地址”

#3.下载图片

  这里的url1是因为子页面的url需要和首页url拼接。但是我们使用的搜索到的url和首页url不一致,所以这里我们把首页url放上携程url1.

  import requests

from bs4 import BeautifulSoup

headers={

"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"

}

url1="https://pic.netbian.com"

  还是老套路,用for循环来获取搜索dota的子页面的每一页的信息。共有3页,0,1,2

  for c in range(0,2):

url="https://pic.netbian.com/e/search/result/index.php?page="+"c"+"&searchid=2700"

resp=requests.get(url,headers=headers)

resp.close()

#print(resp.text)

  日常代码分析,变成bs4类型

  #把源代码交给beautifulsoup

main_page=BeautifulSoup(resp.text,"html.parser")

a_list=main_page.find("ul",class_="clearfix").find_all("a")

#print(a_list)

  事实上,我在这里又写了一步。下载地址的url已经收录在搜索结果的子页面中了,但是为了训练我对bs4的理解,我还是输入了一张单图然后获取二级子页面的下载。网址。

   for a in a_list:

#print(url1+a.get("href"))#直接通过get可以获得属性的值

#拿到子页面的源代码

child_page_resp=requests.get(url1+a.get("href"),headers=headers)

child_page_resp.close()

#丛子页面中拿到图片的下载地址

child_page=BeautifulSoup(child_page_resp.text,"html.parser")

child_page_img_label=child_page.find("div",class_="photo-pic").find("img")

downloadurl=child_page_img_label.get("src")

#print(url1+downloadurl)

  最后是下载图片,因为获取到的图片内容是字节,所以我们写文件的时候,模式选择wb。然后用url最后一个“/”后面的内容作为图片的名字。

   #下载图片

img_resp=requests.get(url1+downloadurl)

img_resp.content#这里拿到的是字节

img_name=downloadurl.split("/")[-1]#拿到url中最后一个/后面的内容作为图片名称

with open(img_name,mode="wb") as f:

f.write(img_resp.content) #图片内容写入文件

print("over!",img_name)

  最后我们所有的代码看起来像这样:

  #1.拿到主页面的源代码,然后提取到子页面的链接href

#2.通过href拿到子页面的内容,然后找到下载链接,进行下载 “img里面src的值就是下载地址”

#3.下载图片

import requests

from bs4 import BeautifulSoup

headers={

"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"

}

url1="https://pic.netbian.com"

for c in range(0,2):

url="https://pic.netbian.com/e/search/result/index.php?page="+"c"+"&searchid=2700"

resp=requests.get(url,headers=headers)

resp.close()

#print(resp.text)

#把源代码交给beautifulsoup

main_page=BeautifulSoup(resp.text,"html.parser")

a_list=main_page.find("ul",class_="clearfix").find_all("a")

#print(a_list)

for a in a_list:

#print(url1+a.get("href"))#直接通过get可以获得属性的值

#拿到子页面的源代码

child_page_resp=requests.get(url1+a.get("href"),headers=headers)

child_page_resp.close()

#丛子页面中拿到图片的下载地址

child_page=BeautifulSoup(child_page_resp.text,"html.parser")

child_page_img_label=child_page.find("div",class_="photo-pic").find("img")

downloadurl=child_page_img_label.get("src")

#print(url1+downloadurl)

#下载图片

img_resp=requests.get(url1+downloadurl)

img_resp.content#这里拿到的是字节

img_name=downloadurl.split("/")[-1]#拿到url中最后一个/后面的内容作为图片名称

with open(img_name,mode="wb") as f:

f.write(img_resp.content) #图片内容写入文件

print("over!",img_name)

print("all over!")

  这里有一些问题,因为我使用for循环来获取搜索结果页面0、1、2的图片,但是for循环似乎不起作用。没有页面。我以为我的程序有问题,于是取消了for循环,手动下载了第0、1、2页的图片,只注释了(for c in range(0,2):)这句话我下载了依据文字,结果完全正确,这让我很不解,因为我有点累,所以我不想动脑,反正这个帖子没人看,等人以后谁来帮我解答!

  题外话,哈哈哈,博主本人可以说是剑客。这么多年过去了,可惜他还是很好的。这里有一点私生活,放几张今天发现的dota2的壁纸,觉得很不错。我希望这个游戏不会死。

  

  

  

  

  

  - - - - - - - - - - - - - - - - - - - - - - -分界线 - - -------------------------------------------------- ---------------------

  老师说最好加个时间控制,避免访问太快

  import time

******

time.sleep(1)#暂停一秒继续运行程序

  另一个坑是我用的是pycharm。每次写图片,pycharm都会为所有文件创建一个索引,以便快速找到需要的文件。但是我们下载图片的时候就不需要索引了。另外,如果我们下载了很多图片,IDE会变得很卡,所以我们可以右击存放图片的文件夹,找到标记目录为-->excluted,这样pycharm就会将该文件夹内的文件不被索引。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线