动态网页的信息爬取
文章目录
- 一、在Anaconda的虚拟环境下安装selenium
-
- 1.selenium
- 2.驱动下载
- 3.路径添加
第二步:启动浏览器并访问百度网站
-
三、爬取一个动态网页的数据
-
- 1.获取网页的元素信息
- 2.代码实现
- 3.运行结果
-
四、爬取京东商品信息
-
- 1.代码
- 2.运行结果
-
参考文章
一、在Anaconda的虚拟环境下安装selenium
1.selenium
Selenium是一种用于Web自动化测试工具的设计方案,在最初的开发阶段就明确了其目标——即实现网站自动化测试流程。这种类型的工具类似于那些用于游戏操作的手动辅助工具,在功能上也具备相似性:通过预先设定的操作指令自动生成相应的动作。与传统方法相比的不同之处在于,Selenium能够直接运行于主流浏览器环境,无需依赖如PhantomJS等无需界面型浏览器的支持,从而实现了更加便捷和高效的用户体验
基于用户的指示,Selenium 能够协助浏览器自动加载网页内容,并提取所需信息.此外还能实现屏幕捕获,并或检测网站上特定的行为是否触发.
Selenium本身不具备浏览器功能,在某些情况下无法直接执行传统的网页浏览操作。因此,在某些情况下我们需要将Selenium集成到代码中以实现其功能。PhantomJS是一种强大的工具,在这种情况下非常有用。
在Anaconda Prompt中输入
conda install selenium
2.驱动下载
为了使用Selenium调用浏览器,并且每个不同的浏览器都需要单独安装对应的WebDriver。各浏览器下载地址:下载地址。Firefox的版本是Geckodriver。
该软件的安装包名称为 chromedriver ,其官方下载链接可通过以下途径获取:taobao备用地址
IE浏览器驱动:IEDriverServer
Edge浏览器驱动:MicrosoftWebDriver
Opera浏览器驱动:operadriver
PhantomJS浏览器驱动:phantomjs
3.路径添加
下载完成后,将路径添加进入环境变量

二、自动打开百度并填充、搜索
1.获取百度页面
from selenium import webdriver
driver=webdriver.Chrome('D:\ chromedriver.exe')
#进入网页
driver.get("https://www.baidu.com/")
2.填充搜索框
p_input = driver.find_element_by_id('kw')
print(p_input)
print(p_input.location)
print(p_input.size)
print(p_input.send_keys('你好世界'))
print(p_input.text)

3.模拟点击
p_btn = driver.find_element_by_id('su')
p_btn.click()
4.整个运行结果

三、爬取一个动态网页的数据
1.获取网页的元素信息
通过执行F12快捷键,在div中主要包含几种类型的标签:包括quote标记、text引文以及author标识等。

第一页仅有单一的NEXT按钮;中间页面提供Previous和NEXT两个按钮;末页仅有PREVIOUS按钮。经过观察发现,在所有NEXT按钮中仅具有href属性而无法直接定位;因此可通过查找来确定这些标准元素的位置并实现定位功能;具体而言可以找到最后一个带有aria-hidden属性的span标签点击其父元素即可成功跳转至下一页面
3.页数
网站总共有10页

2.代码实现
# 爬取 http://quotes.toscrape.com/js/ 名人名言
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
# 名言所在网站
driver=webdriver.Chrome('D:\ chromedriver.exe')
driver.get("http://quotes.toscrape.com/js/")
# 所有数据
subjects = []
# 单个数据
subject=[]
# 获取所有含有quote的标签
# res_list=driver.find_elements_by_class_name("quote")# 有些不能用了,这个是版本更新,下面是我适应的
res_list=driver.find_elements(By.CLASS_NAME, "quote")
# 分离出需要的内容
for tmp in res_list:
subject.append(tmp.find_element(By.CLASS_NAME, "author").text)
subject.append(tmp.find_element(By.CLASS_NAME, "text").text)
print(subject)
subjects.append(subject)
subject=[]
3.运行结果

四、爬取京东商品信息
1.代码
from selenium import webdriver
import time
import csv
from tqdm import tqdm#在电脑终端上显示进度,使代码可视化进度加快
driver=webdriver.Chrome('D:\ chromedriver.exe')
#加载页面
driver.get("https://www.jd.com/")
time.sleep(3)
#定义存放图书信息的列表
goods_info_list=[]
#爬取200本
goods_num=200
#定义表头
goods_head=['价格','名字','链接']
#csv文件的路径和名字
goods_path='D:\ pachong.csv'
#向输入框里输入Java
p_input = driver.find_element_by_id("key")
p_input.send_keys('Java')
#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-price')
#获取元素
goods_name=goods.find_element_by_css_selector('div.p-name')
#获取链接
goods_herf=goods.find_element_by_css_selector('div.p-img>a').get_property('href')
return goods_price,goods_name,goods_herf
def 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-=1
goods_price,goods_name,goods_herf=get_prince_and_name(goods_list[i])
goods=[]
goods.append(goods_price.text)
goods.append(goods_name.text)
goods.append(goods_herf)
goods_info_list.append(goods)
if goods_num==0:
break
return goods_num
while 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)
2.运行结果

参考文章
<>
