• 首页
  • 狐文
  • 狐图
  • About
狐窝
OvO
  1. 首页
  2. 未分类
  3. 正文

爬虫实例——通过JS控制滚动条

2017年08月08日 79点热度 0人点赞 0条评论

2016-06 from---http://www.cnblogs.com/yestreenstars/p/5548101.html

案例

某位淘女郎的某个相册

有能力的童鞋可以先尝试一下爬取每张照片的链接。

我曾经尝试过几种方法,下面一一介绍:

第一种方法,采用requests和BeautifulSoup:

import requests
from bs4 import BeautifulSoup

url = 'https://mm.taobao.com/self/album_photo.htm?spm=719.6642053.0.0.4JUVfm&user_id=687471686&album_id=10000702574&album_flag=0'
bs = BeautifulSoup(requests.get(url).text, 'lxml')
print len(bs('div', 'mm-photoimg-area'))

通过这种方法是得不到任何照片的,因为这个网站的照片是通过JS加载的,requests获取的源代码只是最基本的源代码,里面不含任一照片的链接。

第二种方法,采用selenium、PhantomJS和BeautifulSoup:

复制代码
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from bs4 import BeautifulSoup
from selenium import webdriver

url = 'https://mm.taobao.com/self/album_photo.htm?spm=719.6642053.0.0.4JUVfm&user_id=687471686&album_id=10000702574&album_flag=0'
driver = webdriver.PhantomJS()
driver.get(url)
bs = BeautifulSoup(driver.page_source, 'lxml')
print len(bs('div', 'mm-photoimg-area'))
复制代码

如无意外,你得到的结果应该是16,也就是16张图片,但是,如果你尝试滚动网页,你会发现其实并不止16张照片,这是因为淘宝采用的是ajax技术,只有通过下拉滚动条才会加载新的照片。

在网上查了好多资料都没找到解决方案,最后自己想了个办法:

复制代码
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import time
from bs4 import BeautifulSoup
from selenium import webdriver

url = 'https://mm.taobao.com/self/album_photo.htm?spm=719.6642053.0.0.4JUVfm&user_id=687471686&album_id=10000702574&album_flag=0'
driver = webdriver.PhantomJS()
driver.get(url)
js1 = 'return document.body.scrollHeight'
js2 = 'window.scrollTo(0, document.body.scrollHeight)'
old_scroll_height = 0
while(driver.execute_script(js1) > old_scroll_height):
    old_scroll_height = driver.execute_script(js1)
    driver.execute_script(js2)
    time.sleep(3)
bs = BeautifulSoup(driver.page_source, 'lxml')
print len(bs('div', 'mm-photoimg-area'))
复制代码

如无意外,你得到的结果应该是45,也就是45张照片,这也是该相册的照片总数。

下面介绍一下这段代码的原理:

原理

通过js1可以获取body对象的高度,通过js2可以下拉滚动条。

先将上一次获取的body对象的高度(old_scroll_height)设为0,然后获取最新的body对象的高度,跟上一次获取的进行比较,如果比上一次的值大,就把最新的值赋值给old_scroll_height,然后下拉滚动条,休眠3秒钟,再循环比较,直到最新的值不比上一次的值大为止。

标签: 暂无
最后更新:2017年08月08日

OvO

狐狸

点赞
< 上一篇
下一篇 >
最新 热点 随机
最新 热点 随机
钛备份或小米系统备份功能备份出来的APK无法正常还原 BBR安装启用 安装docker mitmproxy 调试方法 Android SDK 版本选择 Perdition Mail代理服务器配置 HAProxy SSL代理 Openssl 中间人SSL代理 Stunnel SSL to SSL代理 NGINX反代IMAP配置 各种设备User Agent Torrent下载工具推荐 用 rar2john+hashcat 破解 RAR 文件密码 2020最好的Linux发行版 关闭新版chrome工具栏上拼图图标 Office 下载、安装、激活,有它就够了! Android 非官方的发行版 openwrt添加autoconf-archive
阿里云网站备案做好这些细节,99%都能审核通过 udev控制磁盘引导顺序 CentOS 6/7手动安装BBR和魔改BBR教程 如何下载安装Unraid的测试版 由此次阿里云事件谈粗暴的安全防护手段 验证码破解技术四部曲之环境搭建篇(一) Git remote 修改源 利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素) JSP实现数据传递和保存 Chromium网页URL加载过程分析 动态网页数据抓取踩坑分享 JavaScript 复制图片 Docker Samba 文件共享踩坑记录 隐藏可移动设备列表中不希望出现的硬件 OpenMediaVault3在Debian 8上的另类安装法 Oracle 12c 使用scott等普通用户的方法 ESXi主机上备份虚拟机 删除Maven仓库无用的版本
标签聚合
chromium 安装 git yum ssl https 网卡 chrome 路由 下载 docker e linux 镜像 blog 密码

COPYRIGHT © 2020 狐窝. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS