基于Selenium爬取动态网页

  • 一、打开百度并进行搜索
  • 二、爬取名人名言
    • 1. 爬取一页
    • 2. 爬取5页
    • 3. 数据储存
    • 4. 总代码
  • 三、爬取京东书籍信息
  • 四、总结

一、打开百度并进行搜索

打开百度:

from selenium.webdriver import Chrome
web = Chrome()
web.get('https://www.baidu.com')


找到开发者选项:

输入要查询的值并回车:

input_btn = web.find_element_by_id('kw')
input_btn.send_keys('成龙', Keys.ENTER)

代码:

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keysweb = Chrome()web.get('https://www.baidu.com')web.maximize_window()input_btn = web.find_element_by_id('kw')
input_btn.send_keys('成龙', Keys.ENTER)

二、爬取名人名言

1. 爬取一页

先爬取第一页进行测试。
在开发者工具中可发现每一组名言(名言+名人)都是在一个class="quote"的div中,并且没有其他class="quote的标签:

之后,可发现名言句子在div下的class="text"的标签中,作者在class="author"的small标签中:

因此爬取第一页代码如下:

div_list = web.find_elements_by_class_name('quote')
print(len(div_list))
for div in div_list:saying = div.find_element_by_class_name('text').textauthor = div.find_element_by_class_name('author').textinfo = [saying, author]print(info)

结果如下:

2. 爬取5页

爬取一页后,需要进行翻页,即点击翻页按钮。

可发现Next按钮只有href属性,无法定位。且第一页只有下一页按钮,之后的页数有上一页和下一页按钮,则也无法通过xpath定位:

而其子元素span(即箭头)在第一页中的属性aria-hidden是唯一的,在之后的页数中存在aria-hidden该属性,但Next的箭头总是最后一个。

因此可以通过查找最后一个有aria-hidden属性的span标签,进行点击以跳转到下一页

web.find_elements_by_css_selector('[aria-hidden]')[-1].click()

测试:

n = 5
for i in range(0, n):div_list = web.find_elements_by_class_name('quote')print(len(div_list))for div in div_list:saying = div.find_element_by_class_name('text').textauthor = div.find_element_by_class_name('author').textinfo = [saying, author]print(info)if i == n-1:breakweb.find_elements_by_css_selector('[aria-hidden]')[-1].click()time.sleep(2)

3. 数据储存

sayingAndAuthor = []
n = 5
for i in range(0, n):div_list = web.find_elements_by_class_name('quote')for div in div_list:saying = div.find_element_by_class_name('text').textauthor = div.find_element_by_class_name('author').textinfo = [saying, author]sayingAndAuthor.append(info)print('成功爬取第' + (i+1) + '页')if i == n-1:breakweb.find_elements_by_css_selector('[aria-hidden]')[-1].click()time.sleep(2)with open('名人名言.csv', 'w', encoding='utf-8')as fp:fileWrite = csv.writer(fp)fileWrite.writerow(['名言', '名人'])   # 写入表头fileWrite.writerows(sayingAndAuthor)

4. 总代码

from selenium.webdriver import Chrome
import time
import csvweb = Chrome()web.get('http://quotes.toscrape.com/js/')sayingAndAuthor = []
n = 5
for i in range(0, n):div_list = web.find_elements_by_class_name('quote')for div in div_list:saying = div.find_element_by_class_name('text').textauthor = div.find_element_by_class_name('author').textinfo = [saying, author]sayingAndAuthor.append(info)print('成功爬取第' + str(i + 1) + '页')if i == n-1:breakweb.find_elements_by_css_selector('[aria-hidden]')[-1].click()time.sleep(2)with open('名人名言.csv', 'w', encoding='utf-8')as fp:fileWrite = csv.writer(fp)fileWrite.writerow(['名言', '名人'])   # 写入表头fileWrite.writerows(sayingAndAuthor)
web.close()

爬取结果:

三、爬取京东书籍信息

爬取某个关键字书籍的前三页书籍信息,本文以计算机图形学为例
进入网页并搜索计算机图形学

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keysweb = Chrome(r"D:\\DevTools\\Anaconda\\download\\Anaconda3\\Lib\\site-packages\\selenium\\webdriver\\chrome\\chromedriver.exe")web.get('https://www.jd.com/')
web.maximize_window()
web.find_element_by_id('key').send_keys('三体', Keys.ENTER)  # 找到输入框输入,回车

使用开发者工具可查看每一个商品信息的位置:

发现每一个商品信息都存在于class包含gl-item的li中。因此获取该页面下所有li,由此爬取书籍信息(包括书名和价格)。
翻页:

web.find_element_by_class_name('pn-next').click()  # 点击下一页

数据保存:

with open('三体.csv', 'w', encoding='utf-8')as fp:writer = csv.writer(fp)writer.writerow(['书名', '价格', '作者', '出版社', '预览图片地址'])writer.writerows(all_book_info)

代码准备:

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import time
from lxml import etree
import csvweb = Chrome(r"D:\\DevTools\\Anaconda\\download\\Anaconda3\\Lib\\site-packages\\selenium\\webdriver\\chrome\\chromedriver.exe")
web.get('https://www.jd.com/')
web.maximize_window()
web.find_element_by_id('key').send_keys('计算机图形学', Keys.ENTER)  def get_onePage_info(web):web.execute_script('window.scrollTo(0, document.body.scrollHeight);')time.sleep(2)page_text = web.page_source# 进行解析tree = etree.HTML(page_text)li_list = tree.xpath('//li[contains(@class,"gl-item")]')book_infos = []for li in li_list:book_name = ''.join(li.xpath('.//div[@class="p-name"]/a/em/text()'))     # 书名price = '¥' + \li.xpath('.//div[@class="p-price"]/strong/i/text()')[0]   # 价格author_span = li.xpath('.//span[@class="p-bi-name"]/a/text()')if len(author_span) > 0:  # 作者author = author_span[0]else:author = '无'store_span = li.xpath('.//span[@class="p-bi-store"]/a[1]/text()')  # 出版社if len(store_span) > 0:store = store_span[0]else:store = '无'img_url_a = li.xpath('.//div[@class="p-img"]/a/img')[0]if len(img_url_a.xpath('./@src')) > 0:img_url = 'https' + img_url_a.xpath('./@src')[0]  # 书本图片地址else:img_url = 'https' + img_url_a.xpath('./@data-lazy-img')[0]one_book_info = [book_name, price, author, store, img_url]book_infos.append(one_book_info)return book_infosdef main():web = Chrome(r"D:\\DevTools\\Anaconda\\download\\Anaconda3\\Lib\\site-packages\\selenium\\webdriver\\chrome\\chromedriver.exe")web.get('https://www.jd.com/')web.maximize_window()web.find_element_by_id('key').send_keys('计算机图形学', Keys.ENTER)  # 找到输入框输入,回车time.sleep(2)all_book_info = []for i in range(0, 3):all_book_info += get_onePage_info(web)print('爬取第' + str(i+1) + '页成功')web.find_element_by_class_name('pn-next').click()  # 点击下一页time.sleep(2)with open('计算机图形学.csv', 'w', encoding='utf-8')as fp:writer = csv.writer(fp)writer.writerow(['书名', '价格', '作者', '出版社', '预览图片地址'])writer.writerows(all_book_info)if __name__ == '__main__':main()

爬取结果:

四、总结

本文通过Selenium和webdrive等库,对动态网页的信息进行爬取,selenium对于爬取动态数据十分方便。

Selenium爬取网页相关推荐

  1. 使用selenium爬取网页

    今天学习了使用selenium爬取网页. #本地Chrome浏览器的可视模式设置: from selenium import webdriver #从selenium库中调用webdriver模块 d ...

  2. selenium爬取网页部分HTML代码

    selenium爬取网页部分HTML代码 1.构造webdriver启动方法 2.保存完整HTML代码 3.保存部分HTML代码,及其他方法 其他方案1:BeautifulSoup 其他方案2:lxm ...

  3. python用selenium爬取网页数据_Python项目实战:使用selenium爬取拉勾网数据

    " 一切不经过项目验证的代码都是耍流氓,今天我们就通过一个简单的招聘网站的数据归档进行当前热门岗位的大数据分析,最后以wordcloud进行显示.本文为数据爬取篇." 项目准备: ...

  4. selenium爬取网页表格数据并存到Excel

    简单介绍 1.登录到要爬取信息的页面 登录系统(填写账号密码)→进入表格数据所在的网页页面→定位下拉选框并进行选择→定位时间框选择日期→在选择日期时弹出的是另一个网页窗口进行选择,所以要将切换环境到日 ...

  5. 用Selenium爬取网页简单操作

    一.工具的安装 首先,我们要先安装selenium库.可以通过指令pip install selenium进行安装. 安装完selenium后,还需要安装浏览器驱动程序.这里以chrome为例.安装步 ...

  6. selenium爬取qq音乐

    今日学习(解析selenium爬取qq音乐,附带解析数据) 点此查看原博客 爬取QQ音乐官网指定歌手的前5首歌曲的基本信息和前五百条热门评论: selenium中文网点此学习selenium 简而言之 ...

  7. Python之网络爬虫(selenium爬取动态网页、爬虫案例分析、哈希算法与RSA加密)

    文章目录 一.selenium爬取动态网页 二.爬虫案例分析 三.哈希hash算法与RSA加密 一.selenium爬取动态网页 1.动态网页认知 爬虫其实就是在模仿浏览器的行为 应对要多次数据的交互 ...

  8. 【爬虫】Selenium爬取动态网页的base64图片

    文章简介 Selenium爬取动态网页的base64图片,并解决页面完整加载缓慢,base64字符串的获取和格式转码,一些页面不存在,部分照片无法加载等问题.后附源码. 目录 1,需求 2,环境和使用 ...

  9. Java+Selenium爬取JavaScript返回的网页数据

    案例:本文主要描述如何根据快递单号使用Java+Selenium爬取"爱查快递网页"快递的跟踪信息并按照设计的数据格式返回数据 解决问题:爬取JavaScript返回的网页数据(网 ...

最新文章

  1. iOS调用系统相机文字改为中文
  2. PointPillar:利用伪图像高效实现3D目标检测
  3. 深入Java内存模型
  4. C#LeetCode刷题-拓扑排序
  5. python3 一年中的天数 时间转化为北京时_Python3?环境搭建
  6. 为什么需要学习编程?
  7. MSP430F149学习之路——比较器Comparaor_A
  8. 关于VMWare版本下载选择
  9. linux中文件权限为d-rwxr-xr,Linux基础知识之文件权限详解
  10. Pycharm下载库出错ERROR: Could not find a version that satisfies the requirement
  11. sql中interval用法总结
  12. 【Python/爬虫】爬取网易云音乐评论区热评(练习)
  13. ECSHOP二次开发帮助之全部程序文件说明
  14. java coverage_Java Coverage(Cobertura)工具
  15. 钙钛矿型复合氧化物高熵陶瓷/过渡金属碳氮化物高熵陶瓷/固体氧化物燃料电池(SOFC)材料
  16. linux下通过C语言读取BMP格式图片,在文本终端显示该图片
  17. 如何批量将多个 PDF 文档快速合并成一个文档
  18. vi模式下的几种常用的保存文件并退出命令
  19. 谷歌安卓以AAB替换APK安装包
  20. Mac 下面安装 Git 步骤

热门文章

  1. centos7.6搭建1.19.2版本kubernetes
  2. excel或者wps中 日期计算函数应用
  3. light 1144 spoj 4168
  4. 【机器学习】Pandas入门
  5. app开发中的异步处理(一)
  6. 古代智慧与当代爱情 之 《会饮篇》亚西比德的演讲
  7. 判断cpu大小端模式(c++代码实现)
  8. Laravel入门学习教程
  9. win10 ffmpeg录制视屏音频
  10. Java学习笔记day14(两个引用指向同一对象内存图解、成员变量和局部变量的区别、private关键字、this关键字、构造方法的特点、面向对象标准汽车类练习)