Advertisement

动态网页的信息爬取

阅读量:

文章目录

  • 一、在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.运行结果

在这里插入图片描述

参考文章

<>

全部评论 (0)

还没有任何评论哟~