当前位置: 主页 > Python语言

python爬取动态网页-python爬虫爬取网页所有数据

发布时间:2023-02-09 14:17   浏览次数:次   作者:佚名

Selenium 是一种自动化的网页测试工具。 支持多种浏览器,包括Chrome、Safari、Firefox等主流界面浏览器。 要使用 selenium,浏览器版本需要与 selenium 版本相匹配。 同时可以通过浏览器驱动实现web界面测试,即selenium支持这些浏览器驱动。

这里写图片描述

首先在命令行窗口安装selenium库:pip install selenium,

通过命令查看selenium版本:pip show selenium;

然后,找到安装了对应版本的浏览器;

接下来python爬取动态网页,下载一个浏览器驱动,比如谷歌的chromedriver,火狐的geckodriver;

最后将geckodriver的位置添加到环境变量PATH中。

我使用的配置是win7系统下的Python3.5.2:

selenium3.6.0, firefox54.0, geckodriver-v0.14.0-win64,

D:\PYTHON35\空闲\硒

python爬取网页内容_python爬取动态网页_python爬虫爬取网页所有数据

firefox各版本下载地址:

(不要更新firefox版本,更新后的版本不会对应!)

通过以下命令,可以使用firefox打开百度网页:

import time
from selenium import webdriver
driver=webdriver.Firefox(executable_path=r'D:\PYTHON35\idle\selenium\geckodriver')
#创建firefox的驱动
driver.maximize_window() 
#避免移动版布局和网页版布局窗口影响CSS定位抓取
driver.get('https://www.baidu.com/')

python爬取动态网页_python爬取网页内容_python爬虫爬取网页所有数据

#time.sleep(5) #网页停留5秒 driver.quit()

对于动态页面python爬取动态网页,下面模拟页面下拉:

import time
from selenium import webdriver
driver=webdriver.Firefox(executable_path=r'D:\PYTHON35\idle\selenium\geckodriver')
#创建firefox的驱动
driver.maximize_window() #避免移动版布局和网页版布局窗口影响CSS定位抓取
driver.get('http://www.balmain.com/en_cn/men/new-arrivals.html')
driver.execute_script('window.scrollBy(0, document.body.scrollHeight);')

python爬虫爬取网页所有数据_python爬取动态网页_python爬取网页内容

#execute_script利用javascript模拟动态网页页面下拉

下面将针对“如何判断页面是否被下拉”进行设计,将你要查找的类型的元素全部显示出来:

import time
from selenium import webdriver
driver=webdriver.Firefox(executable_path=r'D:\PYTHON35\idle\selenium\geckodriver') #创建firefox的驱动
driver.maximize_window() #避免移动版布局和网页版布局窗口影响CSS定位抓取
#此处,可以设置查找元素时超时问题,异常检测driver.implicity_wait(5),超过5秒报异常
###为了防止等待抓取超时报错,可以类似的设置打开页面异常检测,这里直接忽略异常继续往下抓取,页面上重要元素几乎都拿到了###

python爬虫爬取网页所有数据_python爬取动态网页_python爬取网页内容

try: driver.get('http://www.balmain.com/en_cn/men/new-arrivals.html') except: pass elements=[] #为了判断是否页面下拉完毕,显示了全部页面元素 count=-1 ###while语句条件,下拉刷新判断关键条件,可以参照页面html源码对照看有多少个元素a### while len(elements) > count: count = len(elements) #记录当前找到多少元素

python爬虫爬取网页所有数据_python爬取动态网页_python爬取网页内容

driver.execute_script('window.scrollBy(0, document.body.scrollHeight);') #找到元素后,做页面下拉刷新 #execute_script利用javascript模拟动态网页页面下拉,scrollBy参数是0表示从0开始下拉,可以修改成任意高度 time.sleep(2) elements=driver.find_elements_by_css_selector('div.products-list > div > a') #元素a定位,find_elements_by_css_selector里elements表示找所有满足条件的元素,element表示找一个满足条件的元素 for element in elements: ###此处可以嵌套查找elements里的元素element.find_XXX_by_css_selector(元素)### print(element.get_attribute('href')) #selenium里的get_attribute类似bs4里的get driver.quit()

这里写图片描述