httpclient 抓取网页(想用的使用参考Java11新特性之HttpClient_java_之家之家)
优采云 发布时间: 2022-03-28 03:08httpclient 抓取网页(想用的使用参考Java11新特性之HttpClient_java_之家之家)
从必应主页抓取他的日常照片
上学的时候用python写了一个小工具,每天抓一张bing的图片。
现在想用java来重构。
抓取图片的想法
首先获取网页的源代码
从网页源代码中,我们可以找到图片的下载链接和图片的描述信息。
使用下载链接获取对应图片。
使用 python 抓取
我们使用python中的requests库来获取网页的源代码,然后使用正则表达式从网页的源代码中搜索图片的下载链接。
res = requests.get(url) #获取网页源码,并利用正则表达式找到与bing每日一图有关的参数
pattern = re.compile(r"(\/th\?id=(.+?)\.jpg)")
# pattern = re.compile(r"\/th\?id=(.+)(\.jpg)")
result = pattern.search(res.text) #从源码中获取bing大图的图片链接
imgLinkParam = result.group(0).split("&")
imgDownloadUrl = url+"&".join(imgLinkParam)
得到图片的下载地址后,还需要从网页中找到图片的标题。
这里我们使用 BeautifulSoup 库来解析网页。
查找所有class="title"的a节点,取a的第一个节点,其内容为图片的标题。
soup = BeautifulSoup(res.text,'lxml') #使用bs4来解析对应的html文件
#print(soup)
# imageInfo = soup.find_all(name="a",attrs={"id":"sh_cp","class":"sc_light"})
imageInfo = soup.find_all(name="a", attrs={"class":"title"})
imageDescription=imageInfo[0].contents[0] #获取对图片的描述
最后我们根据图片链接下载图片到本地
pictureData = requests.get(imgDownloadUrl) #根据下载链接获取图片数据
with open(imgName,"wb") as f:
f.write(pictureData.content)
f.flush()
log_write(logName,"图片保存成功")
如何使用java重构代码
思路和之前python的实现大致相同,先获取bing首页的html内容,然后解析html得到需要的内容。然后下载图片
首先需要构造一个http请求,根据链接发送请求并下载图片文件。这里我们使用java 11自带的HttpClient来发送http请求。
HttpClient的使用参考Java11的新特性,HttpClient小测试knife_java_Script Home()