首页 > 其他分享 >爬取js渲染或ajax加密的网页(万能方法)

爬取js渲染或ajax加密的网页(万能方法)

时间:2022-10-24 20:13:59浏览次数:47  
标签:浏览器 selenium js 爬取 ajax import 网页 requests browser

requests库

Requests 是 Python 的第三方库,它的安装非常简便,如下所示:
python -m pip install requests
Requests 库是在 urllib 的基础上开发而来,它使用 Python 语言编写,并且采用了 Apache2 Licensed(一种开源协议)的 HTTP 库。与 urllib 相比,Requests 更加方便、快捷,因此在编写爬虫程序时 Requests 库使用较多。
但是有时要爬取的网站是由ajax传输数据或者js动态渲染的时候,requests库就显得没那么好用了,获取源代码时经常为空。
下面就要介绍到今天的主角,selenium库

selenium库

一、什么是Selenium

selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。

selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

二、selenium基本使用

用python写爬虫的时候,主要用的是selenium的Webdriver,我们可以通过下面的方式先看看Selenium.Webdriver支持哪些浏览器

执行结果如下,从结果中我们也可以看出基本山支持了常见的所有浏览器:

这里要说一下比较重要的PhantomJS,PhantomJS是一个而基于WebKit的服务端JavaScript API,支持Web而不需要浏览器支持,其快速、原生支持各种Web标准:Dom处理,CSS选择器,JSON等等。PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及无界面测试。

其中最主要的使用方法就是通过selenium进行渲染之后获取渲染好的网页源码,就无须关心数据由本页面产生还是由接口产生。

三、selenium获取网页源代码

# 打开浏览器,请求一个带有动态内容的网页,等待js执行完毕(10秒钟足够),获取当前浏览器render的内容的源码,关闭浏览器

from selenium import webdriver
import time
browser = webdriver.Firefox()
browser.get('http://detail.tmall.com/item.htm?id=12577759834 ')
time.sleep(10)
pageSource = browser.page_source
print pageSource
browser.close()

实例(requests与selenium)

from selenium import webdriver
import time
import requests
from bs4 import BeautifulSoup

# # 传统获取网页源代码操作
# respone = requests.get("https://spa2.scrape.center/page/1")
# html = respone.text

# ====================================================
# 万能操作
browser = webdriver.Chrome()
browser.get("https://spa2.scrape.center/page/1")
# 等待10s,让网页所有js全部加载完全
time.sleep(10)
# 获取网页源代码
html = browser.page_source

soup = BeautifulSoup(html,'html.parser')
print(soup.find_all("h2",class_='m-b-sm'))

标签:浏览器,selenium,js,爬取,ajax,import,网页,requests,browser
From: https://www.cnblogs.com/java-six/p/16822622.html

相关文章

  • js里面的this指向
    在普通函数中,this指向window在定时器函数中,this指向window在对象函数中,this指向当前对象在事件函数中,this指向事件源在构造函数中,this指向实例化对象在数组对象中,this......
  • jmeter组件:JSON Extractor
    Namesofcreatedvariables:参数名JsonPathexpressions:json提取表达式MatchNo:匹配数字,0表示随机匹配DefaultValues:默认值,有几个参数就要写几个......
  • vue3 main.ts文件中引入js文件
    提示无法找到模块的申明文件解决步骤:在tsconfig.json文件中加入一个参数:allowJS"compilerOptions":{"target":"esnext","module":"esnext","stri......
  • Rxjs map, mergeMap 和 switchMap 的区别和联系
    map、mergeMap和switchMap是RxJS中的三个主要运算符,在SAPSpartacus开发中有着广泛的使用场景。mapmap是Observables中最常见的运算符。它的作用与数组中的映......
  • rxjs Observable 设计原理背后的 Pull 和 Push 思路
    Observables顾名思义,是可以被观察的事务。在Rxjs的上下文里,Observable会随着时间的推移,在某个时间点产生数据。Observables可以:不停地(永远)产生值,比如interval操作......
  • JS经典计算。
    <script>/***经典计算*/varaaa={n:1,valueOf:function(){returnthis.n++;}};console.log(aaa==1&&aaa==2&&aaa==3&&aaa==4&&aaa==......
  • 前端项目启动报错:config buildwebpack.dev.conf.js
    前端项目启动报错:configbuildwebpack.dev.conf.js我的主页错误展示错误太长,我就不在标题展示了:webpack-dev-server--inline--progress--configbuild/webpack.d......
  • JS事件循环之宏任务和微任务
    首先我们知道javascript是一个单线程的脚本语言,也就是说我们在执行代码的过程中不会出现同时进行两个进程(执行两段代码)。JS执行过程中会产生两种任务,分别是:同步任务和异......
  • js任务执行顺序
    JS线程简述js是单线程的,一次只能执行一个任务,执行完毕后才能继续下一个。js执行任务的方式也叫作同步执行,同步和异步与我们平时理解的不太一样,平时的同步我们会认为是多......
  • html5中播放rtsp流实现监控、直播等方案(利用Ffmpeg + node.js + websocket + flv.js实
    前提:需要确认你的服务器环境中是否安装了ffmpeg这个工具,因为转码的核心其实就是通过 ffmpeg命令 转码,需要你通过在命令行里输入 ffmpeg 来确认。   安装参考:htt......