文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python基于Selenium怎么实现动态网页信息的爬取

2023-06-22 00:03

关注

这篇文章主要介绍“Python基于Selenium怎么实现动态网页信息的爬取”,在日常操作中,相信很多人在Python基于Selenium怎么实现动态网页信息的爬取问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python基于Selenium怎么实现动态网页信息的爬取”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、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 webdriverbrowser = webdriver.Chrome()browser.get('http://www.baidu.com/')

2.定位元素

在开发者工具中找到输入框

Python基于Selenium怎么实现动态网页信息的爬取

输入要查询的值并通过button点击事件实现

input_btn = web.find_element_by_id('kw')input_btn.send_keys('原神', Keys.ENTER)

测试:

Python基于Selenium怎么实现动态网页信息的爬取

三、爬取动态网页的名人名言

1. 网页数据分析

在开发者工具中查看每一组名言(名言+名人)的位置:

Python基于Selenium怎么实现动态网页信息的爬取

现每一组名言都是在class="quote"的div中,并且没有其他class="quote的标签。

Python基于Selenium怎么实现动态网页信息的爬取

且名句在class="text"的<span>标签中,作者在class="author"的small标签中。

2. 翻页分析

在开发者工具中查看Next翻页按钮

Python基于Selenium怎么实现动态网页信息的爬取

可发现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 Chromeimport timeimport csvweb = Chrome(r"D:\\DevTools\\Anaconda\\download\\Anaconda3\\Lib\\site-packages\\selenium\\webdriver\\chrome\\chromedriver.exe")web.get('http://quotes.toscrape.com/js/')sayingAndAuthor = []n = 5for 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()

爬取结果:

Python基于Selenium怎么实现动态网页信息的爬取

四、爬取京东网站书籍信息

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

进入网页并搜索计算机图形学

from selenium.webdriver import Chromefrom 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)  # 找到输入框输入,回车

Python基于Selenium怎么实现动态网页信息的爬取

成功。

网页分析

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

Python基于Selenium怎么实现动态网页信息的爬取

发现每一个商品信息都存在于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 Chromefrom selenium.webdriver.common.keys import Keysimport timefrom lxml import etreeimport 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()

爬取结果

Python基于Selenium怎么实现动态网页信息的爬取

成功

到此,关于“Python基于Selenium怎么实现动态网页信息的爬取”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯