Python 基于Selenium实现 * 页信息的爬取
作者:Max_Shy 发布时间:2023-10-31 12:00:22
一、Selenium介绍与配置
1.Selenium简介
Selenium 是ThoughtWorks专门为Web应用程序编写的一个验收测试工具。Selenium测试直接运行在浏览器中,可以模拟真实用户的行为。支持的浏览器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好地工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。
2. Selenium+Python环境配置
pip install selenium
二、网页自动化测试
1.启动浏览器并打开百度搜索
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')
2.定位元素
在开发者工具中找到输入框
输入要查询的值并通过button点击事件实现
input_btn = web.find_element_by_id('kw')
input_btn.send_keys('原神', Keys.ENTER)
测试:
三、爬取 * 页的名人名言
1. 网页数据分析
在开发者工具中查看每一组名言(名言+名人)的位置:
现每一组名言都是在class="quote"的div中,并且没有其他class="quote的标签。
且名句在class="text"的<span>标签中,作者在class="author"的small标签中。
2. 翻页分析
在开发者工具中查看Next翻页按钮
可发现Next按钮只有href属性,无法定位。但可以通过查找网页最后一个有aria-hidden属性的span标签,进行点击以跳转到下一页。
3.爬取数据的存储
爬取后的数据需要存储至csv文件中,编写代码如下:
with open('Saying.csv', 'w', encoding='utf-8')as fp:
fileWrite = csv.writer(fp)
fileWrite.writerow(['名言', '名人'])
fileWrite.writerows(sayingAndAuthor)
web.close()
4. 爬取数据
代码准备:
from selenium.webdriver import Chrome
import time
import csv
web = Chrome(r"D:\\DevTools\\Anaconda\\download\\Anaconda3\\Lib\\site-packages\\selenium\\webdriver\\chrome\\chromedriver.exe")
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').text
author = div.find_element_by_class_name('author').text
info = [saying, author]
sayingAndAuthor.append(info)
print('成功爬取第' + str(i + 1) + '页')
if i == n-1:
break
web.find_elements_by_css_selector('[aria-hidden]')[-1].click()
time.sleep(2)
with open('Saying.csv', 'w', encoding='utf-8')as fp:
fileWrite = csv.writer(fp)
fileWrite.writerow(['名言', '名人']) # 写入表头
fileWrite.writerows(sayingAndAuthor)
web.close()
爬取结果:
四、爬取京东网站书籍信息
爬取某个关键字书籍的前三页书籍信息,本文以计算机图形学为例
1.进入网页并搜索计算机图形学
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
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) # 找到输入框输入,回车
成功。
2.网页分析
使用开发者工具可查看每一个商品信息的位置
发现每一个商品信息都存在于class包含gl-item的li中。因此获取该页面下所有li,由此爬取书籍信息(包括书名和价格)。
3.翻页
web.find_element_by_class_name('pn-next').click() # 点击下一页
4.数据保存
with open('计算机图形学.csv', 'w', encoding='utf-8')as fp:
writer = csv.writer(fp)
writer.writerow(['书名', '价格', '作者', '出版社', '预览图片地址'])
writer.writerows(all_book_info)
5.代码准备
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import time
from lxml import etree
import csv
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)
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_infos
def 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等库,对 * 页的信息进行爬取。
来源:https://blog.csdn.net/YangMax1/article/details/121704916


猜你喜欢
- 你是不是觉得每次新建项目都要写一次# coding:utf-8,感觉特烦人呐!懒(fu)人(li)教程来啦,先看效果图吧中文版如图进入设置然
- 前言看到这篇文章我就默认你已经在你的电脑上使用 pipenv搭建好了虚拟环境并且设置好了开发环境(pycharm)。如果没有,请参照这篇文章
- 一、功能实现对学生对个人信息的增删查改实现后台对所有学生信息的操作二、平台windows+pycharm(python开发工具)三、逻辑框图
- mysql-proxy实现读写分离MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测、
- 目录寻找 url下载视频执行代码下载:最后的话回答来源微信 8.0 版本更新后,可以设置个人状态,状态里面可以添加火录制视频,很快状态视频就
- 在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出。Python中内置有对字符串进行格式化的操作%。模
- 区别于redis的分布式缓存,ehcache是纯java进程内的单机缓存,根据不同的场景可选择使用,以下内容主要为springboot整合e
- 本文实例讲述了Python 面向对象之类class和对象基本用法。分享给大家供大家参考,具体如下:类(class):定义一件事物的抽象特点,
- 当然我们可以在后台中获取参数的值,然后在前台js代码中获取变量的值,具体做法请参考我的这篇文章:JavaScript获取后台C#变量以及调用
- 这种组合使得开发Web程序简单、安全、效率高。由于程序是在Linux下运行,虽免去了版权费用,对数据库的管理却少了Windows下的图形界面
- 目录一、conftest.py的特点二、conftest.py的使用场景三、conftest.py的生效范围四、conftest.py的的s
- 单向链表单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节
- 通过web框架搭建一个最简易的程序:第一步:新建一个web框架程序通过CMD进入到想要创建web程序的文件夹数据命令django-admin
- 用户习惯大家都经常在提,习惯源于何出?回答可以是软件的用户习惯源于其不断使用过程中的印象积累。如果是这个软件刚诞生的时候呢?于是就得参考同类
- 首先说明一下SQL Server内存占用由哪几部分组成。SQL Server占用的内存主要由三部分组成:数据缓存(Data Buffer)、
- 一、前言在上一小节,我们介绍了文件的基本操作以及数据交换的格式,为了巩固我们上一节文件操作的知识。在这里我们做一个最基本的案例:用户登录二、
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona
- 1、选取最适用的字段属性MySQL 可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建
- 在本章中,我们将学习如何使用 Bootstrap 创建表单。Bootstrap 通过一些简单的 HTML 标签和扩展的类即可创建
- 下面,我们将会介绍 2014 年最火的 21 款JavaScript 框架,专为前端开发者准备的哦:)众所周知, JavaScript 框架