中小企业建站服务,自己如何做团购网站,网站app免费生成软件,培训学校怎么招生2024年了#xff0c;你需要网络资源不能还自己再慢慢找吧#xff1f; 跟着博主一块学习如何利用爬虫获取资源#xff0c;从茫茫大海中寻找那个她到再妹子群中找妹子#xff0c;闭着眼睛都可以找到合适的那种。文章有完整示例代码#xff0c;拿过来就可以用#xff0c;欢迎…
2024年了你需要网络资源不能还自己再慢慢找吧 跟着博主一块学习如何利用爬虫获取资源从茫茫大海中寻找那个她到再妹子群中找妹子闭着眼睛都可以找到合适的那种。文章有完整示例代码拿过来就可以用欢迎实践尝试。
-▽˃̣̣̣̣˂▽˗ˏˋˎ˗
1.案例简介
本次案例主要针对网络图片下载使用网络爬虫技术抓取百度图片能够根据指定的关键字搜索相关主题的图片然后把图片下载到本地指定的文件夹中。本次讲解内容主题是python大家实践可以换成自己喜欢的主题。
2.设计思路
目标通过百度图片引擎入口抓取指定主题的图片然后把抓取的图片保存到本地文件夹中。
设计爬虫首先需要把握抓取对象URL的规律。分析网页源代码和网页结构配合F12键查看网页源代码。这一步是抓取成功的关键。
接着借助HTTP第三方库获取HTML源代码使用正则表达式、XPath表达式等技术解析其结构根据一定的逻辑分解其中的图片URL。
最后把网上URL图片保存到本地完成本例操作。
3.关键技术
把网上图片下载到本地。可以使用request.urlretrieveO函数也可以使用Python的文件操作函数write()写入文件。
爬取指定网页中的图片。首先用urllib库来模拟浏览器访问网站的页的源代码(htinl标签)。其中源代码以字符串的形式返回然后用正则表达式re库在字符串(网页源代码)中匹配表示图片链接的子字符串返 回一个列表最后循环列表根据图片链接将图片保存到本地。
也可以使用BeautifulSoup抓取图片。BeautifulSoup是一个Python处理HTML/XML的函数库是Python内置的网页分析工具用来快速地转换被抓取的网页。它产生一个转换后DOM树尽可能和原文档内容的含义一致这种措施通常能够满足用户搜集数据的需求。BeautifulSoup提供了一些简单的方法以及类Python语法来查找、定位、修改一棵转换后DOM树。BeautifulSoup自动将送进来的文档转换为Unicode编码而且在输出的时候转换为UTF-8。
使用requests请求URL和读取网页源代码。requests库和urllib库的作用相似且使用方法基木一致都是根据HTTP协议操作各种消息和页而但使用requests库比使用urllib库更简单些。
4.设计过程
第1步先研究百度图片的入口规律。
进入百度图片(https://image.baidu.com/ ),输入某个关键字(如python)然后单击“百度一下”按钮搜索可见如下网址:
https://image.baidu.com/search/index?tnbaiduimageipnrct201326592cl2lm-1st-1fmindexfrhs0xthttps111111sf1fmqpvic0nc1zse1showtab0fb0widthheightface0istype2ieutf-8wordpythonoqpythonrsp-1 其中wordpython查询字符串表示搜索的主题。所看见的页面是瀑布流版木当向下滑动的时候可以不停刷新这是一种动态的网页。需要按F12键通过Network下的XHR分析网页的结构。
第2步找到源代码规律之后就可以动手编写Python代码了。
5.示例结果 6.示例源码
# test1.py 运行程序之前需要现在当前目录下创建pictures文件夹。
# 导入库
import requests
import os.path
import re
# 设置默认配置
MaxSearchPage 20 # 收索页数
CurrentPage 0 # 当前正在搜索的页数
DefaultPath pictures # 默认储存位置
NeedSave 0 # 是否需要储存
# 图片链接正则和下一页的链接正则
def imageFiler(content): # 通过正则获取当前页面的图片地址数组return re.findall(objURL:(.*?),content,re.S)
def nextSource(content): # 通过正则获取下一页的网址next re.findall(div idpage.*a href(.*?) classn,content,re.S)[0]print(--------- http://image.baidu.com next) return next
# 爬虫主体
def spidler(source):content requests.get(source).text # 通过链接获取内容imageArr imageFiler(content) # 获取图片数组global CurrentPageprint(当前页 str(CurrentPage) )for imageUrl in imageArr:print(imageUrl)global NeedSaveif NeedSave: # 如果需要保存图片则下载图片否则不下载图片global DefaultPathtry:# 下载图片并设置超时时间,如果图片地址错误就不继续等待了picture requests.get(imageUrl,timeout10) except: print(下载错误! errorUrl: imageUrl) continue# 创建图片保存的路径# imageUrl imageUrl.replace(/,).replace(:,).replace(?,)imageUrl1 os.path.basename(imageUrl)basepath os.getcwd()print( imageUrl1 )pictureSavePath basepath / DefaultPath imageUrl1pictureSavePath pictureSavePath.split(?)[0]print(pictureSavePath)fp open(pictureSavePath,wb) # 以写入二进制的方式打开文件fp.write(picture.content)fp.close()global MaxSearchPageif CurrentPage MaxSearchPage: # 继续下一页爬取if nextSource(content):CurrentPage 1 # 爬取完毕后通过下一页地址继续爬取spidler(http://image.baidu.com nextSource(content))
#爬虫的开启方法
def beginSearch(page1,save0,savePathpictures/): # (page:爬取页数,save:是否储存,savePath:默认储存路径)global MaxSearchPage,NeedSave,DefaultPathMaxSearchPage pageNeedSave save # 是否保存值0不保存1保存DefaultPath savePath # 图片保存的位置key input(请输入关键词 ) StartSource http://image.baidu.com/search/flip?tnbaiduimageieutf-8word str(key) ct201326592vflip # 分析链接可以得到,替换其word值后面的数据来搜索关键词spidler(StartSource)
#调用开启的方法就可以通过关键词搜索图片了
beginSearch(page5,save1) # page5是下载前5页save1保存图片