当前位置:   article > 正文

Python3、requests、BeautifulSoup、webdriver下载动态加载的网页图片(包含静态网页获取与动态加载的网页内容获取)_如何下载所有get为img的图片 动态加载

如何下载所有get为img的图片 动态加载

Python3获取京东商品列表信息,并根据列表信息地址提取信息详情页的相关图片(京东商品详情信息图片采用JS动态加载,需控制网页滚动至一定位置才能加载,初始的静态页面没有商品图片),因此本文采用两种方法加载网页:一种是加载商品列表页(如图1所示),并提取其中的商品列表地址;另一种是根据商品详情页的内容(如图2),控制滚动条滚动至页面底端,确保商品详情图片加载完毕,然后获取网页信息,提取图片地址,最后完成下载,下载流程如图3,主要基于python3采用requests、BeautifulSoup、webdriver包。

代码实现:

第一步:获取商品列表页内容,该页面为静态页面,采用requests包实现,并采用beautifulsoup包筛选网页内容,获取商品详情页地址,代码如下 

  1. if __name__=='__main__':
  2. try:
  3. url="https://search.jd.com/Search?keyword=%E9%A3%8E%E8%A1%A3%E7%94%B7&enc=utf-8&suggest=2.def.0.V01--12s0,20s0,38s0,97s0&wq=fengyi&pvid=50ceb61c8ad04e0f9d9ab28abfecbd82"
  4. html=DownLoadImg.GetHtml(url)
  5. soup=BeautifulSoup(html.text,'html.parser')
  6. urls=soup.select('.p-name-type-2>a')
  7. for uu in urls:
  8. itemImg=uu['href']
  9. if itemImg.startswith("//"):
  10. itemImg=itemImg.replace("//","https://").strip()
  11. print(itemImg)
  12. #time.sleep(5)
  13. DownLoadImg.Down(itemImg,'999')
  14. #DownLoadImg.Down('https://item.jd.com/34615071979.html','999')
  15. except Exception as e:
  16. print('chucuo')
  17. raise e

第二步:根据商品详情页地址,采用webdriver包,模拟人工操作(基于谷歌浏览器),将页面滚动至网页底端,加载商品详情相关内容(注:商品详情内容为动态加载,当仅仅打开页面时,商品详情相关内容并不主动加载,因此需人工模拟滚动),代码如下:

  1. # 获取网页源代码,动态内容获取
  2. def get_html_page(url):
  3. try:
  4. driver = webdriver.Chrome(executable_path=driver_path)
  5. driver.get(url)
  6. time.sleep(3)
  7. # 执行页面向下滑至底部的动作
  8. driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
  9. # 停顿5秒等待页面加载完毕!!!(必须留有页面加载的时间,否则获得的源代码会不完整。)
  10. time.sleep(3)
  11. html_sourcode = driver.page_source
  12. driver.close()
  13. return html_sourcode
  14. except Exception as e:
  15. print(e)

第三步:在模拟人工网页滚动后,根据获取的网页内容,采用beautifulsoup包,筛选网页中图片地址,然后进行下载(本文在代码所在文件夹创建文件夹,将下载图片保存至此)。

  1. #下载新内容所在网页地址
  2. def Down(url,DicName):
  3. req=DownLoadImg.get_html_page(url)
  4. #print(req)
  5. try:
  6. if req=="":
  7. print('网址内容为空')
  8. else:
  9. soup=BeautifulSoup(req,'html.parser')
  10. ll=soup.select('#J-detail-content img[src]')
  11. #print(ll)
  12. #创建存储路径
  13. file_dir=os.getcwd()
  14. file_path=os.path.join(file_dir,DicName)
  15. check_excists=os.path.exists(file_path)
  16. if not check_excists:
  17. os.makedirs(file_path)
  18. count_num=0
  19. for img in ll:
  20. imgurl=img.get('src').strip()
  21. count_num=count_num+1
  22. now_time=datetime.now().strftime('%m%d_%S')
  23. image_name=r"{0}\{1}_image_{2}.jpg".format(file_path,now_time,count_num)
  24. if imgurl.startswith("//"):
  25. imgurl=imgurl.replace("//","http://")
  26. #print(imgurl)
  27. r=requests.get(imgurl,timeout=30)
  28. #print(r)
  29. with open(image_name,'wb') as fw:
  30. fw.write(r.content)
  31. print("save image:{0}".format(count_num))

至此操作完成,本文主要针对网页动态资源进行学习,欢迎探讨,完整代码详见作者上传资源。

参考文档:

https://blog.csdn.net/slhlde/article/details/81937838

https://blog.csdn.net/weixin_38917807/article/details/81386175

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/801172
推荐阅读
相关标签
  

闽ICP备14008679号