0


【网络爬虫】基于Selenium爬取动态网页

目录

一、Selenium介绍与配置

1.Selenium简介

  Selenium 是ThoughtWorks专门为Web应用程序编写的一个验收测试工具。Selenium测试直接运行在浏览器中,可以模拟真实用户的行为。支持的浏览器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好地工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。

2. Selenium+Python环境配置

  1. pip install selenium

二、网页自动化测试

1.启动浏览器并打开百度搜索

  1. from selenium import webdriver
  2. browser = webdriver.Chrome()
  3. browser.get('http://www.baidu.com/')

2.定位元素

  1. 在开发者工具中找到输入框在这里插入图片描述
  2. 输入要查询的值并通过button点击事件实现
  1. input_btn = web.find_element_by_id('kw')
  2. input_btn.send_keys('原神', Keys.ENTER)

测试:
在这里插入图片描述

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

1. 网页数据分析

  1. 开发者工具

中查看每一组名言(名言+名人)的位置:
在这里插入图片描述
现每一组名言都是在

  1. class="quote"

  1. div

中,并且没有其他

  1. class="quote

的标签。

在这里插入图片描述
且名句在

  1. class="text"

  1. <span>

标签中,作者在

  1. class="author"

  1. small

标签中。

2. 翻页分析

  1. 开发者工具

中查看

  1. Next

翻页按钮
在这里插入图片描述
可发现

  1. Next按钮

只有

  1. href

属性,无法定位。但可以通过查找网页最后一个有

  1. aria-hidden

属性的

  1. span

标签,进行点击以跳转到下一页。

3.爬取数据的存储

爬取后的数据需要存储至

  1. csv

文件中,编写代码如下:

  1. withopen('Saying.csv','w', encoding='utf-8')as fp:
  2. fileWrite = csv.writer(fp)
  3. fileWrite.writerow(['名言','名人'])
  4. fileWrite.writerows(sayingAndAuthor)
  5. web.close()

4. 爬取数据

代码准备:

  1. from selenium.webdriver import Chrome
  2. import time
  3. import csv
  4. web = Chrome(r"D:\\DevTools\\Anaconda\\download\\Anaconda3\\Lib\\site-packages\\selenium\\webdriver\\chrome\\chromedriver.exe")
  5. web.get('http://quotes.toscrape.com/js/')
  6. sayingAndAuthor =[]
  7. n =5for i inrange(0, n):
  8. div_list = web.find_elements_by_class_name('quote')for div in div_list:
  9. saying = div.find_element_by_class_name('text').text
  10. author = div.find_element_by_class_name('author').text
  11. info =[saying, author]
  12. sayingAndAuthor.append(info)print('成功爬取第'+str(i +1)+'页')if i == n-1:break
  13. web.find_elements_by_css_selector('[aria-hidden]')[-1].click()
  14. time.sleep(2)withopen('Saying.csv','w', encoding='utf-8')as fp:
  15. fileWrite = csv.writer(fp)
  16. fileWrite.writerow(['名言','名人'])# 写入表头
  17. fileWrite.writerows(sayingAndAuthor)
  18. web.close()

爬取结果:
在这里插入图片描述

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

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

  1. 进入网页并搜索计算机图形学
  1. from selenium.webdriver import Chrome
  2. from selenium.webdriver.common.keys import Keys
  3. web = Chrome(r"D:\\DevTools\\Anaconda\\download\\Anaconda3\\Lib\\site-packages\\selenium\\webdriver\\chrome\\chromedriver.exe")
  4. web.get('https://www.jd.com/')
  5. web.maximize_window()
  6. web.find_element_by_id('key').send_keys('计算机图形学', Keys.ENTER)# 找到输入框输入,回车

在这里插入图片描述
成功。

  1. 网页分析 使用开发者工具可查看每一个商品信息的位置在这里插入图片描述 发现每一个商品信息都存在于class包含gl-itemli中。因此获取该页面下所有li,由此爬取书籍信息(包括书名和价格)。
  2. 翻页
  1. web.find_element_by_class_name('pn-next').click()# 点击下一页
  1. 数据保存
  1. withopen('计算机图形学.csv','w', encoding='utf-8')as fp:
  2. writer = csv.writer(fp)
  3. writer.writerow(['书名','价格','作者','出版社','预览图片地址'])
  4. writer.writerows(all_book_info)
  1. 代码准备
  1. from selenium.webdriver import Chrome
  2. from selenium.webdriver.common.keys import Keys
  3. import time
  4. from lxml import etree
  5. import csv
  6. web = Chrome(r"D:\\DevTools\\Anaconda\\download\\Anaconda3\\Lib\\site-packages\\selenium\\webdriver\\chrome\\chromedriver.exe")
  7. web.get('https://www.jd.com/')
  8. web.maximize_window()
  9. web.find_element_by_id('key').send_keys('计算机图形学', Keys.ENTER)defget_onePage_info(web):
  10. web.execute_script('window.scrollTo(0, document.body.scrollHeight);')
  11. time.sleep(2)
  12. page_text = web.page_source
  13. # 进行解析
  14. tree = etree.HTML(page_text)
  15. li_list = tree.xpath('//li[contains(@class,"gl-item")]')
  16. book_infos =[]for li in li_list:
  17. book_name =''.join(
  18. li.xpath('.//div[@class="p-name"]/a/em/text()'))# 书名
  19. price ='¥'+ \
  20. li.xpath('.//div[@class="p-price"]/strong/i/text()')[0]# 价格
  21. author_span = li.xpath('.//span[@class="p-bi-name"]/a/text()')iflen(author_span)>0:# 作者
  22. author = author_span[0]else:
  23. author ='无'
  24. store_span = li.xpath('.//span[@class="p-bi-store"]/a[1]/text()')# 出版社iflen(store_span)>0:
  25. store = store_span[0]else:
  26. store ='无'
  27. img_url_a = li.xpath('.//div[@class="p-img"]/a/img')[0]iflen(img_url_a.xpath('./@src'))>0:
  28. img_url ='https'+ img_url_a.xpath('./@src')[0]# 书本图片地址else:
  29. img_url ='https'+ img_url_a.xpath('./@data-lazy-img')[0]
  30. one_book_info =[book_name, price, author, store, img_url]
  31. book_infos.append(one_book_info)return book_infos
  32. defmain():
  33. web = Chrome(r"D:\\DevTools\\Anaconda\\download\\Anaconda3\\Lib\\site-packages\\selenium\\webdriver\\chrome\\chromedriver.exe")
  34. web.get('https://www.jd.com/')
  35. web.maximize_window()
  36. web.find_element_by_id('key').send_keys('计算机图形学', Keys.ENTER)# 找到输入框输入,回车
  37. time.sleep(2)
  38. all_book_info =[]for i inrange(0,3):
  39. all_book_info += get_onePage_info(web)print('爬取第'+str(i+1)+'页成功')
  40. web.find_element_by_class_name('pn-next').click()# 点击下一页
  41. time.sleep(2)withopen('计算机图形学.csv','w', encoding='utf-8')as fp:
  42. writer = csv.writer(fp)
  43. writer.writerow(['书名','价格','作者','出版社','预览图片地址'])
  44. writer.writerows(all_book_info)if __name__ =='__main__':
  45. main()
  1. 爬取结果在这里插入图片描述 成功

五、总结

  本文通过Selenium和webdrive等库,对动态网页的信息进行爬取。

六、参考

https://zhuanlan.zhihu.com/p/331712873

标签: 爬虫 selenium python

本文转载自: https://blog.csdn.net/YangMax1/article/details/121704916
版权归原作者 Max_Shy 所有, 如有侵权,请联系我们删除。

“【网络爬虫】基于Selenium爬取动态网页”的评论:

还没有评论