Python+Selenium动态网页的信息爬取
录
- 一、Selenium
- 1.1 简介
- 1.2 配置
- 二、对百度进行自动化测试
- 2.1 进入百度搜索界面
- 2.2 自动填充百度网页的查询关键字并完成自动搜索
- 三、爬取指定网页的名言
- 3.1 找到元素
- 3.2 代码实现
- 3.3 运行结果
- 四、Selenium:requests+Selenum爬取京东图书
- 4.1 查看页面元素
- 4.2 代码
- 4.3 运行
- 小小的总结
- 参考文献
注:因为某些原因,原本的图片被判定为违规,咱就说很委屈。
Github源文件下载:https://github.com/longl118/Selenium
一、Selenium
1.1 简介
Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。
Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。
Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 PhantomJS 的工具代替真实的浏览器。
1.2 配置
- 安装依赖
要开始使用selenium,需要安装一些依赖,打开Anaconda Prompt
conda install selenium
- 安装驱动
要使用selenium去调用浏览器,还需要一个驱动,不同浏览器的webdriver需要独立安装
各浏览器下载地址:selenium官网驱动下载(https://www.selenium.dev/downloads/)
Firefox浏览器驱动:geckodriver
Chrome浏览器驱动:chromedriver , taobao备用地址
IE浏览器驱动:IEDriverServer
Edge浏览器驱动:MicrosoftWebDriver
Opera浏览器驱动:operadriver
PhantomJS浏览器驱动:phantomjs
- 笔主这里下载 Chrome的 https://npm.taobao.org/mirrors/chromedriver/
- 进去下载
- 下载后解压,将解压的chromedriver.exe文件添加到系统的环境变量(不知道有没有用,大佬的博客都是这样做的)
二、对百度进行自动化测试
2.1 进入百度搜索界面
- 在Anaconda的jupyter中写入代码
from selenium import webdriver
driver=webdriver.Chrome('D:\\***\\chromedriver.exe')
#进入网页
driver.get("https://www.baidu.com/")
- 这时会报错。我们就再次打开Anaconda Prompt,安装webdriver_manager:
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
#进入网页
driver.get("https://www.baidu.com/")
- 运行得到:
- 点击那个链接,得到:
2.2 自动填充百度网页的查询关键字并完成自动搜索
- 在百度页面右键,点击 检查
- 我们可以看到 搜索框的id是 kw
- 用代码找到该元素,并填取相应的值
p_input = driver.find_element_by_id("kw")
p_input.send_keys('爱奇艺')
- 运行结果
- 同样找到搜索按钮的 id ,为su
- 点击该按钮
#点击搜索按钮
p_btn=driver.find_element_by_id('su')
p_btn.click()
- 运行结果
三、爬取指定网页的名言
3.1 找到元素
- 网页:http://quotes.toscrape.com/page/1/
- 选择一段名言,右键
- 可以看到class为text
3.2 代码实现
- 代码
from bs4 import BeautifulSoup as bs
from selenium import webdriver
import csv
from selenium.webdriver.chrome.options import Options
from tqdm import tqdm#在电脑终端上显示进度,使代码可视化进度加快
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('http://quotes.toscrape.com/js/')
#定义csv表头
quote_head=['名言','作者']
#csv文件的路径和名字
quote_path='C:\\Users\\28205\\Documents\\Tencent Files\\2820535964\\FileRecv\\quote_csv.csv'
#存放内容的列表
quote_content=[]'''
function_name:write_csv
parameters: csv_head,csv_content,csv_path
csv_head: the csv file head
csv_content: the csv file content,the number of columns equal to length of csv_head
csv_path: the csv file route
'''
def write_csv(csv_head,csv_content,csv_path):with open(csv_path, 'w', newline='') as file:fileWriter =csv.writer(file)fileWriter.writerow(csv_head)fileWriter.writerows(csv_content)print('爬取信息成功')###
#可以用find_elements_by_class_name获取所有含这个元素的集合(列表也有可能)
#然后把这个提取出来之后再用继续提取
quote=driver.find_elements_by_class_name("quote")
#将要收集的信息放在quote_content里
for i in tqdm(range(len(quote))): quote_text=quote[i].find_element_by_class_name("text")quote_author=quote[i].find_element_by_class_name("author")temp=[]temp.append(quote_text.text)temp.append(quote_author.text)quote_content.append(temp)
write_csv(quote_head,quote_content,quote_path)
3.3 运行结果
- 运行结果
- csv文件:
四、Selenium:requests+Selenum爬取京东图书
4.1 查看页面元素
- 打开京东页面查看页面元素,分析需要爬取信息的标签id:
- 搜索红楼梦,查看元素
4.2 代码
from selenium import webdriver
import time
import csv
from tqdm import tqdm#在电脑终端上显示进度,使代码可视化进度加快
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
#加载页面
driver.get("https://www.jd.com/")
time.sleep(3)#定义存放图书信息的列表
goods_info_list=[]
#爬取200本
goods_num=200
#定义表头
goods_head=['名字','价格','评价条数','店铺','链接']
#csv文件的路径和名字
goods_path='D:\\1azanshi\\a\\honglou1.csv'#向输入框里输入Java
p_input = driver.find_element_by_id("key")
p_input.send_keys('红楼梦')#button好像不能根据类名直接获取,先获取大的div,再获取按钮
from_filed=driver.find_element_by_class_name('form')
s_btn=from_filed.find_element_by_tag_name('button')
s_btn.click()#实现点击#获取商品名字,价格,评价条数,店铺,链接
def get_prince_and_name(goods):#直接用css定位元素#获取名字goods_price=goods.find_element_by_css_selector('div.p-name')#获取价格goods_name=goods.find_element_by_css_selector('div.p-price')#获取评价条数goods_commit=goods.find_element_by_css_selector('div.p-commit')#获取店铺名称goods_shopnum=goods.find_element_by_css_selector('div.p-shopnum')#获取链接goods_herf=goods.find_element_by_css_selector('div.p-img>a').get_property('href')return goods_name,goods_price,goods_commit,goods_shopnum,goods_herfdef drop_down(web_driver):#将滚动条调整至页面底部web_driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')time.sleep(3)#获取爬取一页
def crawl_a_page(web_driver,goods_num):#获取图书列表drop_down(web_driver)goods_list=web_driver.find_elements_by_css_selector('div#J_goodsList>ul>li')#获取一个图书的价格、名字、链接for i in tqdm(range(len(goods_list))):goods_num-=1goods_price,goods_name,goods_commit,goods_shopnum,goods_herf=get_prince_and_name(goods_list[i])goods=[]goods.append(goods_price.text)goods.append(goods_name.text)goods.append(goods_commit.text)goods.append(goods_shopnum.text)goods.append(goods_herf)goods_info_list.append(goods)if goods_num==0:breakreturn goods_numwhile goods_num!=0:goods_num=crawl_a_page(driver,goods_num)btn=driver.find_element_by_class_name('pn-next').click()time.sleep(1)
write_csv(goods_head,goods_info_list,goods_path)
4.3 运行
- 运行效果
- .csv文件
小小的总结
- 运行看自己的电脑被操纵,莫名有点有趣。
- 本次实验,完成动态网页的信息爬取,和静态网页一样需要查看网页结构。找到元素id或者利用相关函数得到元素,最后将信息获取,存储。以及对Selenium爬取网页的原理过程也有一定的了解。
参考文献
- 动态网页爬虫:https://blog.csdn.net/qq_45659777/article/details/121722475
- Python+Selenium动态网页的信息爬取:
https://blog.csdn.net/weixin_56102526/article/details/121870172 - 动态网页的信息爬取:https://blog.csdn.net/qq_46359931/article/details/121918256
Python+Selenium动态网页的信息爬取相关推荐
- 动态网页的信息爬取(Python+Selenium)
文章目录 一.Selenium 1.1 简介 1.2 配置环境 二.自动填充百度网页的查询关键字并完成自动搜索 三.爬取一个动态网页的数据 3.1 查看元素 3.2 代码 四.爬取京东网站上的感兴趣书 ...
- 基于Python的必联网招标信息爬取系统 课程报告+代码
资源下载地址:https://download.csdn.net/download/sheziqiong/85672637 资源下载地址:https://download.csdn.net/downl ...
- selenium+chormdriver+python 实现淘宝的信息爬取
因为我是个爬虫新手,所以对爬虫还不熟练,这几天想着自己做一个淘宝信息的自动爬取,一开始感觉比较简单,但做到了登录界面,发现一直被网站检测出来,不能滑动滑块.接下来从网上翻遍了资料,整理了以下自己的代码 ...
- Python动态网页爬虫之爬取知乎话题回答
你是如何开始能写Python爬虫?就这个问题我查看了一下知乎,看到各种大牛写的心得,感觉受益匪浅,于是我有了一种冲动,想把各种大牛回答的心得爬取下来,以后可以细细品味. 首先我们在浏览器输入https ...
- python+selenium爬虫按照名单循环爬取作者知网下载量等信息
主要爬取下面的表格内的信息如文献篇数,被引用数等等 用的是selenium爬虫 from selenium import webdriver from selenium.common.exceptio ...
- python ip动态代理_Python实现爬取可用代理IP
Python实现爬取可用代理IP,在实现爬虫时,动态设置代理IP可以有效防止反爬虫,但对于普通爬虫初学者需要在代理网站上测试可用代理IP.由于手动测试过程相对比较繁琐,且重复无用过程故编写代码以实现动 ...
- 【Python】Scrapy完成电影信息爬取并存入数据库
本文使用了scrapy框架对电影信息进行爬取并将这些数据存入MySQL数据库. 一.安装相关python模块 根据你所使用的python包管理器安装相应的模块.比如使用pip: pip install ...
- Python 爬虫“王者”:微博信息爬取
这里的微博爬虫,我主要实现的是输入你关心的某个大 V 的微博名称,以及某条微博的相关内容片段,即可自动爬取相关该大 V 一段时间内发布的微博信息和对应微博的评论信息. Cookie 获取 与上面的 B ...
- 动态网页 —— 案例: 爬取qq邮箱
其实在前一张博客动态网页--selenium+案例 中已经简单的爬过一遍qq邮箱了.本次呢是在上一次的代码上再完善一下啊. 其实我们很多习惯是养成了的,比如说我们很多人都是打开电脑后会立即登录自己的q ...
最新文章
- 为什么LINKBUTTON不能插在LTEMTEMPLATE里???
- Android Nand Flash 分区
- 【C++ Primer | 13】课后习题答案
- Oracle中一般游标与REF游标的区别
- 实现简单的ImageLoader
- 外贸网站建设(转自xmfish)
- ACCESS中执行sql语句
- 卡巴斯基称发现美国中情局CIA 开发的新恶意软件
- TensorFlow人工智能入门教程之十一 最强网络DLSTM 双向长短期记忆网络(阿里小AI实现)...
- 【模板】线性筛法求素数
- 【游戏开发实战】Unity UGUI序列帧动画(蓝胖子序列帧图)
- python画行向日葵_如何用Python画一朵太阳花
- QScrollArea 动态添加控件问题
- 报错:SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.
- 盛铭轩电商:详情页优化
- var与varchar
- C++ 类的简单使用
- 在Power BI中用DAX计算净现值NPV
- 计算机桌面最小化后找不到,微博桌面最小化后找不到图标了怎么办??
- iOS 边学边记 HLS协议 m3u8 ts详解
热门文章
- 回流和重绘的介绍以及优化方法
- Calendar JAVA中用来计算时间差, 两个时间差, 多个时间差.
- photoshop cs6制备背景透明的png文件
- cucumber的hooks
- pychrm设置全局代理
- AutoCAD for Mac v2024 三维制图软件 兼容M1
- RuntimeError: populate() isn‘t reentrant
- SuperSocket框架实现服务器和Winform客户端
- java继承 -宠物类叫Pet(父类) ;属性有name 和 age; 行为有吃 eat(); 喝 drink(); 叫声shout();子类 Cat 和 Dog Cat继承 Pet类所
- 三年程序人生 深圳码农成长中进步