说在前面: 本文主要介绍如何抓取 页面加载后需要通过JS加载的数据和图片

本文是通过python中的selenium(pyhton包) + chrome(谷歌浏览器) + chromedrive(谷歌浏览器驱动)

chrome 和chromdrive建议都下最新版本(参考地址:https://blog.csdn.net/yoyocat915/article/details/80580066)

同样支持无头模式(不需要打开浏览器)

直接上代码:site_url:需要爬取的地址,CHROME_DRIVER_PATH:chromedrive存放地址

 def get_dynamic_html(site_url):
print('开始加载',site_url,'动态页面')
chrome_options = webdriver.ChromeOptions()
#ban sandbox
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
#use headless,无头模式
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--ignore-ssl-errors')
driver = webdriver.Chrome(executable_path=CHROME_DRIVER_PATH,chrome_options=chrome_options)
#print('dynamic laod web is', site_url)
driver.set_page_load_timeout(100)
#driver.set_script_timeout(100)
try:
driver.get(site_url)
except Exception as e:
#driver.execute_script('window.stop()') # 超出时间则不加载
print(e, 'dynamic web load timeout')
data = driver.page_source
soup = BeautifulSoup(data, 'html.parser')
try:
driver.quit()
except:
pass
return soup

返回的一个soup,这样可以对这个soup进行搜索节点,使用select,search,find等方法找到你想要的节点或者数据

同样如果你想变成文本下载下来,则

 try:
with open(xxx.html, 'w+', encoding="utf-8") as f:
#print ('html content is:',content)
f.write(get_dynamic_html('https://xxx.com').prettify())
f.close()
except Exception as e:
print(e)

下面详细说一下,beautifusoup的搜索

首先如何定位到一个标签

1.使用 find  (这位博主详细介绍了https://www.jb51.net/article/109782.htm)

  • find() 返回匹配第一个:如soup.find(name='ul',attrs={class:'hh'}) 返回第一个 class='hh'的ul
  • find_all() 返回全部
  • find_parent() 搜索父标签,返回第一个
  • find_parents()搜索父标签,返回全部
  • find_next_sibling()返回下一个同级标签
  • find_next_siblings()
  • find_previous_sibling() 返回上一个同级标签
  • find_previous()返回前面的标签
  • find_all_previous()
  • find_next()返回后面的标签
  • find_all_next()
2.使用select
 通过标签名,类名,id 类似 Jquery的选择器 如 soup.select('p .link #link1') 选择定位到 <p class='link' id='link1'></p>
 
通过属性查找 ,如href ,title,link等属性,如  soup.select('p a[href="http://example.com/elsie"]')
这里匹配到的是最小的 <a href='http://example.com/elsie'></a> 并且他的上级为<p></p>
 
然后说一下 对节点的操作
  删除节点tag.decompose()
  在指定位置 插入子节点 tag.insert(0,chlid_tag)
 
最后通过beautifusoup是筛选元素的一种好的方法,下篇我们介绍正则表达式匹配筛选 爬虫内容
 
 

网页爬虫--python3.6+selenium+BeautifulSoup实现动态网页的数据抓取,适用于对抓取频率不高的情况的更多相关文章

  1. 爬虫进阶之Selenium和chromedriver,动态网页(Ajax)数据抓取

    什么是Ajax: Ajax(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意 ...

  2. 【音乐爬虫】Python爬虫-selenium+browsermob-proxy 解决动态网页 js渲染问题

    1.一般的python爬虫很简单,直接请求对应网址,解析返回的数据即可,但是有很多网站的数据的js动态渲染的,你直接请求是得不到对应的数据的 这时就需要其它手段来处理了. 2.以一个例子来说明,整个过 ...

  3. python爬虫之requests+selenium+BeautifulSoup

    前言: 环境配置:windows64.python3.4 requests库基本操作: 1.安装:pip install requests 2.功能:使用 requests 发送网络请求,可以实现跟浏 ...

  4. python网页爬虫开发之六-Selenium使用

    chromedriver禁用图片,禁用js,切换UA selenium 模拟chrome浏览器,此时就是一个真实的浏览器,一个浏览器该加载的该渲染的它都加载都渲染,所以爬取网页的速度很慢.如果可以不加 ...

  5. python爬取动态网页数据,详解

    原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了? 浏览器请求数据方式:浏览器向服务器的api(例 ...

  6. 第三章 Django之动态网页基础(1)

    前一章中,我们解释了如何建立一个 Django 项目并启动 Django 开发服务器.当然,那个网站实际并没有干什么有用的事情,它所做的只是显示 It worked!消息.让我们来做些改变.本章将介绍 ...

  7. 在python使用selenium获取动态网页信息并用BeautifulSoup进行解析--动态网页爬虫

    爬虫抓取数据时有些数据是动态数据,例如是用js动态加载的,使用普通的urllib2 抓取数据是找不到相关数据的,这是爬虫初学者在使用的过程中,最容易发生的情况,明明在浏览器里有相应的信息,但是在pyt ...

  8. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  9. 爬虫---selenium动态网页数据抓取

    动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页 ...

随机推荐

  1. SpringMVC数据传递及乱码问题

    基础环境搭建请参考SringMVC入门程序 一.SpringMVC数据处理 1:resful 路径传值 http://localhost/get/1/2 /* http://localhost/get ...

  2. Say goodbye

    Since September 28th 2015 Scriptogram officially closed. We considered every option before making th ...

  3. PHP $_FILES的应用

    关于文件上传这块,如果处理不好的话,很容易成为黑客入侵的开口,例如黑客在你这个上传接口里放一段木马的文件,那只能祝你好运了. 所以,我们上传文件的时候都会先判断, 但是一般的操作是先上传,再判断,如果 ...

  4. Kubernetes产生背景、核心概念

    Kubernetes是什么 • Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S. • Kubernetes用于容器化应用程序的部署,扩展和管理 ...

  5. 对于WebP格式入门解读

    因为项目中需要用到大量动画效果,前期尝试过几种方案,比如GIF.帧动画.lottie.SVGA等格式的动画渲染方案,发现都存在各式各样的问题.比如: 1,GIF格式.5秒的动画,一张图大小可能就会达到 ...

  6. 飞机大战-面向对象-pygame

    飞机大战 最近学习了python的面向对象,对面向对象的理解不是很深刻. 面向对象是数据和函数的'打包整理',将相关数据和处理数据的方法集中在一个地方,方便使用和管理. 本着学习的目的,在网上找了这个 ...

  7. optparse--强大的命令行参数处理包

    optparse,它功能强大,而且易于使用,可以方便地生成标准的.符合Unix/Posix 规范的命令行说明. optparse的简单示例: from optparse import OptionPa ...

  8. nginx响应超时upstream timed out 问题处理

    环境介绍 服务器:centos7.2 应用:tomcat集群 服务:nginx 代理 问题描述: 这段时间,听项目组项目经理和业务需求人员跟我反馈,线上业务人员在操作业务交易时,有时会出现nginx错 ...

  9. 手把手教你用Node.js爬虫爬取网站数据

    个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! 开始之前请先确保自己安装了Node.js环境,还没有安装的的童鞋请自行百度 ...

  10. 最简单,最明了,看了就会的VScode和C++的配置!(Visual Studio Code)

    我看了网上的大佬们配的我是在是看不懂啊?我是一个小白啊?这太难了,这阻挡不了我,想使用这很骚的IDE,于是在不断的摸索下,终于配置成功,小白们也不用慌,这次非常简单.一定可以的. 1.下载 VS Co ...