赞
踩
昨天我发布了一篇名为Selenium在爬虫中的应用的文章,今天补充一下Selenium爬虫实践,话不多说直接上代码。
首先导入所需要的库:
- import html
- import time
- from lxml import html
- from selenium import webdriver
- from selenium.webdriver.common.by import By
紧接着定义一个函数来获取浏览器驱动:
- #获取浏览器驱动
- def get_driver():
- option = webdriver.ChromeOptions()
- # 设置编码集
- option.add_argument('lang=zh_CN.UTF-8')
- driver = webdriver.Chrome(options=option)
- return driver
接下来用Selenium实现自动化登录操作,这里提前把用户名和密码设置好,在网页对应的表单中通过element.send_keys("xxxxxx")方法输入用户名和密码。
这里定义一个实现自动登录操作的函数login,后续过程通过调用该函数可实现自动登录,通过find_element(By.XPATH)的方法定位到输入框,输入完账号密码后还需点击同意政策服务的选项按钮,这里的思想是一样的,操作完成后点击登录按钮即可登录。
- def login(driver):
- driver.maximize_window()#最大化窗口
- #定位到登录按钮
- login_button = driver.find_element(By.XPATH, "/html/body/div[2]/div[1]/div/div/div/div/div[2]/ul/li[1]/div/button")
- login_button.click()
-
- username = driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div[2]/div[2]/div/div/div[1]/div[1]/form/dl[1]/dd/input")
- username.send_keys("用户名")
- password = driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div[2]/div[2]/div/div/div[1]/div[1]/form/dl[2]/dd/input")
- password.send_keys("密码")
-
- agree_btn = driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div[2]/div[2]/div/div/div[1]/div[4]/div/div[1]/label")
- agree_btn.click()
-
- log_btn = driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div[2]/div[2]/div/div/div[1]/div[1]/form/dl[3]/dd/input")
- log_btn.click()
登录成功后就开始我们的核心程序的编写,同样定义一个开始任务的函数start_task()。
通过driver.page_source的方法获取到网页信息后再用xpath进行数据解析,定义一个字典用来存储爬取到的数据,当然如果有需要可以自己定义一个存储数据的函数来将数据存储到数据库中。
这里我爬取的内容主要有四个分别是景点名称name、景区热度hotnumber、景区位置location和景点评分score,也可以根据自己需要进行增加和删除。
- #元素定位与爬取数据
- def start_task(driver):
- for i in range(1,5):
- #模拟下滑到底部操作
- for j in range(1,13):
- driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
- time.sleep(1)
-
-
- # 获取网页信息
- resp = driver.page_source
- # 加载xpath,用于数据解析
- etree = html.etree
- xml = etree.HTML(resp)
- #定义字典存储数据
- data_dict = {}
- for k in range(1,13):
- #name:景点名称
- name = xml.xpath(f'//*[@class="list_mod2"]/div[{k}]/div[2]/dl/dt/a/text()')
- if len(name) > 0:
- mess_dict['name'] = name[0]
- else:
- mess_dict['name'] = ' '
-
- #hotnumber:景区热度
- hotnumber = xml.xpath(f'//*[@class="list_mod2"]/div[{k}]/div[2]/dl/dt/a/b[2]/text()')
- if len(hotnumber) > 0:
- try:
- mess_dict['hotnumber'] = float(hotnumber[0])
- except:
- mess_dict['hotnumber'] = '0.0'
- else:
- mess_dict['hotnumber'] = 0.0
-
-
- #location:景区位置
- location = xml.xpath(f'//*[@class="list_mod2"]/div[{k}]/div[2]/dl/dd/text()')
- if len(location) > 0:
- mess_dict['location'] = location[0]
- else:
- mess_dict['location'] = ' '
-
-
- #score:景点评分
- score = xml.xpath(f'//*[@class="list_mod2"]/div[{k}]/div[2]/ul/li/a/text()')
- if len(score) > 0:
- try:
- mess_dict['score'] = float(score[0])
- except:
- mess_dict['score'] = '0.0'
- else:
- mess_dict['score'] = 0.0
- #进行翻页操作
- next_page_btn = driver.find_element(By.XPATH, "/html/body/div[2]/div[2]/div[4]/div/div[2]/div/div[3]/div[12]/div/a[7]")
- next_page_btn.click()
- time.sleep(1)
- driver.quit()
最后就是调用定义的函数了!!!
- #加载浏览器驱动
- driver = get_driver()
- #指定url
- url = "https://you.ctrip.com/sight/beijing1.html"
- #进入页面
- driver.get(url)
- #登录
- login(driver=driver)
- #开始任务
- start_task(driver=driver)
以上内容为Selenium在爬虫应用中通用的基本流程,可根据需求自己扩展添加。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。