python抓取动态网页( 本节讲解PythonSelenium爬虫爬虫实战案例(一)(图))
优采云 发布时间: 2022-03-16 03:19python抓取动态网页(
本节讲解PythonSelenium爬虫爬虫实战案例(一)(图))
Python Selenium爬虫的实际应用
本节讲解Python Selenium爬虫的实际案例。通过实际案例的讲解,可以进一步了解 Selenium 框架。
实战案例的目标:抓取京东商城()的商品名称、商品价格、评论数、店铺名称。例如,如果您输入搜索“Python 书籍”,则会捕获以下数据:
{'name': 'Python编程 从入门到实践 第2版 人民邮电出版社', 'price': '¥52.50', 'count': '200+条评价', 'shop': '智囊图书专营店'}
{'name': 'Python编程 从入门到实践 第2版(图灵出品)', 'price': '¥62.10', 'count': '20万+条评价', 'shop': '人民邮电出版社'}
…
Selenium 框架的学习重点是定位元素节点。我们介绍了 8 种定位方法,其中 Xpath 表达式适用性强,方便快捷。因此,建议您熟悉 Xpath 表达式的相关语法规则。本节的大部分案例都是使用Xpath表达式来定位元素,希望能帮助你更新知识。
本节案例涉及几个技术难点:一是如何下拉滚动条下载产品;二、如何翻页,即抓取下一页的内容;第三,如何判断数据是否被抓取,即结束页面。下面我们一步一步解释。
实现自动搜索
是实现自动输出和自动搜索的最基本步骤。先定位输入框的节点,再定位搜索按钮节点。这与实现百度自动搜索的思路是一致的。最重要的是正确定位元素节点。
通过开发者调试工具查看对应位置,可以得到如下Xpath表达式:
输入框表达式://*[@id="key"]
搜索按钮表达式://*[@class='form']/button
代码如下所示:
from selenium import webdriver
broswer=webdriver.Chrome()
broswer.get('https://www.jd.com/')
broswer.find_element_by_xpath('//*[@id="key"]').send_keys("python书籍")
broswer.find_element_by_xpath("//*[@class='form']/button").click()
滚动条
实现自动搜索后,接下来就是爬取页面中的商品信息,你会发现只有当滑块滚动到底部时,商品才会满载。滚轮操作的代码如下:
# scrollTo(xpos,ypos)
# execute_script()执行js语句,拉动进度条件
#scrollHeight属性,表示可滚动内容的高度
self.browser.execute_script(
'window.scrollTo(0,document.body.scrollHeight)'#拉动进度条至底部
)
之后,通过Xpath表达式匹配所有产品,放入一个大列表中,通过循环列表取出每个产品,最后提取出想要的信息。
li_list=self.browser.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li')
for li in li_list:
item={}
# 提取商品名
item['name']=li.find_element_by_xpath('.//div[@class="p-name"]/a/em').text.strip()
# 提取价格
item['price']=li.find_element_by_xpath('.//div[@class="p-price"]').text.strip()
# 提取评论数量
item['count']=li.find_element_by_xpath('.//div[@class="p-commit"]/strong').text.strip()
# 提取商家店铺
item['shop']=li.find_element_by_xpath('.//div[@class="p-shopnum"]').text.strip()
实现翻页
如何实现翻页取数据,判断数据已经取到?这其实不难想到,我们可以跳转到最后一页(即最后一页)。此时最后一页的“下一页”不可用,其元素节点如下: