三步学会爬动态网站

释放双眼,带上耳机,听听看~!

声明

本篇文章仅用于技术讨论,严禁用于任何非法用途。此外,请尽量通过公开数据进行练习,减缓爬取速度和数量。

三步学会爬动态网站

在我们写爬虫程序时,难免会碰到一些动态加载的网页,为获取数据制造了困难。本篇文章我将尝试用非常简短的篇幅来教大家:如何应对动态加载的网页。

以Ruby语言为例,可以在Linux、Mac、Windows等平台上进行实验。

一、目标分析

目标:收集目标网站上公开的所有产品型号

所有的产品通过类型进行分类,如下所示:

image.png

当点击某个分类后,出现具体的产品信息:

image.png
image.png

需要注意的是,这部分产品信息是通过解析参数后动态加载的,这是本篇要解决的主要问题:

二、Nokogiri

https://nokogiri.org/

Nokogiri是一个用于解析HTML, XML, SAX等内容的开源Ruby库,可以通过XPath和CSS选择器语法来操作内容。

安装:

```apt install rubygem install nokogiri```

通过简单分析,各分类的url位于以下结构中:

```<ul class="header-subnav-list">  <li>    <a></a>  <</li></ul>```
image.png

由于这些内容在网站中是静态的,我们直接使用open-uri打开目标网页,配合Nokogiri来获取各分类的url:

```#irb是Ruby的交互式shell,root@bad:~# irbrequire 'nokogiri'require 'open-uri'#获取目标网站HTML代码doc=Nokogiri::HTML(open("http://www.xxxx.com"))#通过xpath选择器获取目标内容ar=doc.xpath("//ul[@class='header-subnav-list']//li//a")href = []ar.each {|a| href << a["href"]}```

查看一下获取的列表:

image.png

前面提到,分类里边的产品列表由Javascript动态加载,这时候我们可以使用Watir来获取动态内容。

三、Watir

http://watir.com/

Waitr是一个用于自动化测试的开源Ruby库。Watir将使用跟真人一样的浏览器交互方式来点击链接,填写表单和验证文本。可以配合Chrome、Firefox、IE、Safari、Edge等。

以Chrome为例,除了安装Waitr外,还需要安装chromedriver:

```gem install watirapt install chromium-driver#其他平台可参考https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver```

当我们使用Watir访问目标网站时,会出现一个受代码控制的Chrome窗口。(不要用鼠标去操作或者关掉它!!)

image.png

由于浏览器加载内容需要一些时间,所以我们适当增加一些休眠时间确保内容加载完成。通过Watir获取了每个页面的内容后,再次通过nokogiri进行获取即可。

image.png
```#接着上面的代码require 'watir'browser = Watir::Browser.newbrowser.goto "http://www.xxxx.com#{href[2]}"sleep(1)doc=Nokogiri::HTML(browser.html)ar=doc.xpath("//div[@class='product-list']//ul//li//a//div//span")ar.each {|a| p a.content if a.content != '' }```
image.png

可以适当输出一些中间内容,方便在出错时调试。

人已赞赏
极客

作为内网杀手的metsploit如何在外网使用呢?

2020-9-30 12:13:10

极客

这可能是史上最简单的一键安装虚拟机win7系统了

2020-9-30 12:15:14

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索