python使用selenium库进行自动化操作

本文使用python的selenium库模拟点击爬取携程景点的景点信息和评论信息,自动过滤景点评论不超过10条的景点。

使用selenium库优点

优点:不容易被ban

缺点:时间长

  1. 安装seleniumm

pip install selenium

  1. 下载浏览器驱动

http://chromedriver.storage.googleapis.com/index.html

http://npm.taobao.org/mirrors/chromedriver/

驱动和py文件要放在一个文件夹下

from selenium import webdriver
from time import sleep
import csv
from selenium.webdriver.common.by import By
import xlwt  # 进行excel操作
#谷歌驱动 告诉电脑在哪打开浏览器
# edge_options=webdriver.EdgeOptions()
# edge_options.add_argument('--headless')
# edge_options.add_argument('--disable-gpu')
# driver=webdriver.Edge(options=edge_options)

driver=webdriver.Edge()
#打开网页
driver.get("https://hotels.ctrip.com/?allianceid=4897&sid=798178&bd_vid=8152353566163309773")#打开网页
#通过xpath点击搜索
driver.find_element(By.XPATH,r'//*[@id="_allSearchKeyword"]').send_keys('香港')#输入关键词
driver.implicitly_wait(2)#隐式休息20s 登录携程
driver.find_element(By.XPATH,r'//*[@id="search_button_global"]').click()#点击搜索,点一次可能没反应
driver.implicitly_wait(2)#隐式休息20s 登录携程
driver.find_element(By.XPATH,r'//*[@id="search_button_global"]').click()
driver.implicitly_wait(2)#隐式休息20s 登录携程
driver.find_element(By.XPATH,r'//*[@id="search_button_global"]').click()
driver.implicitly_wait(10)#隐式休息20s 登录携程
driver.find_element(By.XPATH,r'//*[@id="search_button_global"]').click()
driver.implicitly_wait(2)#隐式休息20s 登录携程
driver.find_element(By.XPATH,r'//*[@id="search_button_global"]').click()
driver.implicitly_wait(2)#隐式休息20s 登录携程
# print(driver.window_handles)
driver.switch_to.window(driver.window_handles[-1])#切换到新标签页
driver.maximize_window()#窗口最大化

driver.find_element(By.XPATH,r'//*[@id="__next"]/div/div/div/div[3]/div[1]').click()#点击景点
driver.implicitly_wait(5)#隐式休息20s 登录携程
driver.find_element(By.XPATH,r'//*[@id="__next"]/div/div/div/div[3]/div[1]').click()

driver.implicitly_wait(10)
######存储信息
names=[]
introduces=[]
counts=[]
contents=[]
driver.switch_to.window(driver.window_handles[-1])
# driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")#下滑至底部

driver.implicitly_wait(10)
for j in range(10):#爬取前十页景点信息
    for i in range(11):#进入前十个景点   
        if i != 5:#第五个是广告
            
            driver.implicitly_wait(5)
            driver.execute_script('window.scrollBy(0,180)')#下滑
            driver.implicitly_wait(20)
            
            count=0
            driver.find_element(By.XPATH,'//*[@id="content"]/div[4]/div/div[2]/div/div[3]/div['+str(i+1)+']/div[1]').click()#进入景点
            driver.implicitly_wait(10)
            driver.switch_to.window(driver.window_handles[-1])
            names.append(driver.find_element(By.XPATH,r'//*[@id="__next"]/div[3]/div/div[3]/div[2]').text)#搜集需要的信息
            introduces.append(driver.find_element(By.XPATH,r'//*[@id="__next"]/div[3]/div/div[4]/div[1]/div[2]/div').text)
            contents.append(driver.find_element(By.XPATH,r'//*[@id="commentModule"]').text)
            count+=1#用来判断搜集道德评论数量
            ######读取前十页评论
            try:
                for k in range(3):
                    driver.execute_script('window.scrollBy(0,1800)')
                    driver.find_element(By.XPATH,'//*[@id="commentModule"]/div[6]/ul/li[9]/span/a').click()
                    driver.implicitly_wait(10)
                    driver.execute_script("var q=document.documentElement.scrollTop=0")
                    contents.append(driver.find_element(By.XPATH,r'//*[@id="commentModule"]').text)
                    count+=1
                driver.execute_script('window.scrollBy(0,1800)')
                driver.find_element(By.XPATH,'//*[@id="commentModule"]/div[6]/ul/li[10]/span/a').click()
                driver.implicitly_wait(10)
                driver.execute_script("var q=document.documentElement.scrollTop=0")
                contents.append(driver.find_element(By.XPATH,r'//*[@id="commentModule"]').text)   
                count+=1
                for k in range(5):
                    driver.execute_script('window.scrollBy(0,1800)')
                    driver.find_element(By.XPATH,'//*[@id="commentModule"]/div[6]/ul/li[11]/span/a').click()
                    driver.implicitly_wait(10)
                    driver.execute_script("var q=document.documentElement.scrollTop=0")
                    contents.append(driver.find_element(By.XPATH,r'//*[@id="commentModule"]').text)
                    count+=1
            except:      
                pass
            if count<=1:#如果评论小于十条出栈
                names.pop()
                introduces.pop()
                contents.pop()
            driver.close()#关闭标签页
            driver.switch_to.window(driver.window_handles[-1])#返回上一个界面
    # driver.execute_script('window.scrollBy(0,1500)')
    driver.implicitly_wait(10)
    driver.find_element(By.XPATH,'//*[@id="content"]/div[4]/div/div[2]/div/div[3]/div[12]/div/a[7]').click()#切换下十个景点
    driver.implicitly_wait(10)

    driver.execute_script("var q=document.documentElement.scrollTop=0")#回到顶部
    driver.implicitly_wait(5)#隐式休息20s 登录携程

#存储数据
col = ["介绍","简介","评论"]
with open('携程景点5.csv','a', encoding='utf-8-sig')as w:
    wr=csv.DictWriter(w,col)
    wr.writeheader()
    # writer = csv.writer(w)
    # for i in range(len(names)):
    x={"介绍":names,"简介":introduces,"评论":contents}
    wr.writerow(x)
print("关闭浏览器,保存数据")
  1. 这份代码有一些有缺陷的地方,随后更新新代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值