使用selenium爬取网站动态数据
处理页面动态加载的爬取
selenium
selenium是python的一个第三方库,可以实现让浏览器完成自动化的操作,比如说点击按钮拖动滚轮等
环境搭建:
- 安装:pip install selenium
- 获取浏览器的驱动程序:下载地址http://chromedriver.storage.googleapis.com/index.html
- 驱动与浏览器版本对应:https://blog.csdn.net/ezreal_tao/article/details/80808729
设置chorme浏览器无界面模式:
编码流程:
from selenium import webdriver
import time
# 创建一个浏览器对象 executable_path:驱动路径
bro = webdriver.Chrome(executable_path='./chromedriver')
# get方法可以指定一个url,让浏览器进行请求
bro.get('https://www.baidu.com')
# 让浏览器进行指定词条搜索
'''
#使用下面的方法,查找指定的元素进行操作即可
find_element_by_id 根据id找节点
find_elements_by_name 根据name找
find_elements_by_xpath 根据xpath查找
find_elements_by_tag_name 根据标签名找
find_elements_by_class_name 根据class名字查找
'''
text = bro.find_element_by_id('kw')
text.send_keys('人民币') # send_keys表示向文本框中录入指定内容
time.sleep(3)
button = bro.find_element_by_id('su')
button.click()# click表示的是点击操作
time.sleep(5)
bro.quit()
phantomJs
phantomJs是一个无界面的浏览器,其自动化流程与上述操作谷歌自动化流程是一模一样的
from selenium import webdrvier
使用selenium爬取豆瓣电影搞笑排行榜动态数据
from selenium import webdriver
import time
from lxml import etree
bro = webdriver.Chrome('./chromedriver')
url = 'https://movie.douban.com/typerank?type_name=%E5%96%9C%E5%89%A7&type=24&interval_id=100:90&action='
bro.get(url)
# 等待五秒页面加载完毕
time.sleep(5)
# 重复20次使用页面滚轮
for i in range(20):
time.sleep(2)
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
# 获取页面源代码,可以使用三种解析方式进行解析,这里使用xpath解析数据
text = bro.page_source
tree = etree.HTML(text)
div_list = tree.xpath('//div[@class="movie-info"]')
f = open('豆瓣喜剧电影排行榜.txt','w',encoding='utf-8')
count = 0
for div in div_list:
# 获取电影具体数据,并进行持久化存储
try:
name = div.xpath('./div[@class="movie-name"]/span/a/text()')[0]
link = div.xpath('./div[@class="movie-name"]/span/a/@href')[0]
man = div.xpath('./div[@class="movie-crew"]/text()')[0]
country = div.xpath('./div[@class="movie-misc"]/text()')[0]
num = div.xpath('./div[@class="movie-rating"]/span[2]/text()')[0]
except IndexError:
continue
f.write('电影名:'+name+'\n链接'+link+'\n'+'导演:'+man+'\n国家:'+country+'\n评分:'+num+'\n-----------------------------\n\n\n')
print('写入成功:',name)
count += 1
print('爬取完毕,共抓取%s跳数据'%count)
f.close()
time.sleep(5)
bro.quit()
使用selenium爬取网站动态数据的更多相关文章
- 使用Selenium爬取网站表格类数据
本文转载自一下网站:Python爬虫(5):Selenium 爬取东方财富网股票财务报表 https://www.makcyun.top/web_scraping_withpython5.html 需 ...
- 爬虫(十七):Scrapy框架(四) 对接selenium爬取京东商品数据
1. Scrapy对接Selenium Scrapy抓取页面的方式和requests库类似,都是直接模拟HTTP请求,而Scrapy也不能抓取JavaScript动态谊染的页面.在前面的博客中抓取Ja ...
- 如何使用python爬取网页动态数据
我们在使用python爬取网页数据的时候,会遇到页面的数据是通过js脚本动态加载的情况,这时候我们就得模拟接口请求信息,根据接口返回结果来获取我们想要的数据. 以某电影网站为例:我们要获取到电影名称以 ...
- 利用selenium 爬取豆瓣 武林外传数据并且完成 数据可视化 情绪分析
全文的步骤可以大概分为几步: 一:数据获取,利用selenium+多进程(linux上selenium 多进程可能会有问题)+kafka写数据(linux首选必选耦合)windows直接采用的是写my ...
- python selenium爬取自如租房数据保存到TXT文件
# -*- coding: utf-8 -*-"""Created on Fri Aug 31 2018 @author: chenlinlab"" ...
- scrapy框架 + selenium 爬取豆瓣电影top250......
废话不说,直接上代码..... 目录结构 items.py import scrapy class DoubanCrawlerItem(scrapy.Item): # 电影名称 movieName = ...
- Python+Selenium爬取动态加载页面(1)
注: 最近有一小任务,需要收集水质和水雨信息,找了两个网站:国家地表水水质自动监测实时数据发布系统和全国水雨情网.由于这两个网站的数据都是动态加载出来的,所以我用了Selenium来完成我的数据获取. ...
- selenium跳过webdriver检测并爬取天猫商品数据
目录 简介 编写思路 使用教程 演示图片 源代码 @(文章目录) 简介 现在爬取淘宝,天猫商品数据都是需要首先进行登录的.上一节我们已经完成了模拟登录淘宝的步骤,所以在此不详细讲如何模拟登录淘宝.把关 ...
- Scrapy 框架 使用 selenium 爬取动态加载内容
使用 selenium 爬取动态加载内容 开启中间件 DOWNLOADER_MIDDLEWARES = { 'wangyiPro.middlewares.WangyiproDownloaderMidd ...
随机推荐
- Java(1)JDK安装
1.安装JDK开发环境 下载网站:http://www.oracle.com/ 开始安装JDK: 修改安装目录如下: 确定之后,单击"下一步". 注:当提示安装JRE时,可以选择不 ...
- 力扣(LeetCode) 821. 字符的最短距离
给定一个字符串 S 和一个字符 C.返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组. 示例 1: 输入: S = "loveleetcode", C ...
- Angular 学习笔记 (组件沟通的思考)
组件指令间经常需要沟通 我们知道的方式有 input output service inject viewchild contentchild templateRef template variabl ...
- 继承ActionSupper类报错 --Struts2
如下图所示,继承ActionSupper类报错: 原因:缺少Struts2中JAR包,具体是:
- openLDAP环境搭建
OpenLDAP搭建 PS:本次实验是基于centos7,OpenLDAP使用2.4.44版本. 一.初始化环境 1.初始化环境 命令如下: ntpdate -u ntp.api.bz & ...
- SSH服务器拒绝了密码
一般进行到这一步,可能是sshd的设置不允许root用户远程登录首先修改一下vim /etc/sshd/ssh_config 修改成如下图:然后reboot或者service sshd res ...
- servlet_filter简介
Filter总结: 1.Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静 ...
- 获取ip地址&&测试ip地址
# request# 动态页面加载 Selenium# request# 响应类型为 json# import json # json.loads(str) # 将str转化为dict# json.d ...
- python----集合用法总结
集合也是一种数据类型,一个类似列表东西,它的特点是无序的,不重复的,也就是说集合中是没有重复的数据集合的作用:1.它可以把一个列表中重复的数据去掉,而不需要你再写判断2.可以做关系测试,比如说有两个班 ...
- JavaScript 复杂判断的更优雅写法
我们编写js代码时经常遇到复杂逻辑判断的情况,通常大家可以用if/else或者switch来实现多个条件判断,但这样会有个问题,随着逻辑复杂度的增加,代码中的if/else/switch会变得越来越臃 ...