去年就说写了,但是有点事忘了(懒癌犯了)。今天就补一下欠债吧。但是不想写太多,就以代码为主,进行一个代码讲解。
1.用到的工具
我使用到的比较少,Xpath,谷歌浏览器,chromedriver.exe插件,语言是python。
2.代码解释
下面是一个针对携程上旅游景点东方明珠的爬取。
!pip install xlwt
import selenium
from selenium import webdriver
import time
import xlwt
from selenium.webdriver.support import ui
wait_name=180
datalist=[]
#2网址
url=f'https://you.ctrip.com/sight/shanghai2/762.html'
#3.打开浏览器
path='D:/chromdriver/1/chromedriver.exe'
browser=webdriver.Chrome(executable_path=path)
browser.get(url)
browser.implicitly_wait(10)
#寻找每一个节点
for i in range(0,300):
try:
wait.until(lambda driver:driver.find_elements_by_xpath("//div[@class='commentItem']/div[@class='contentInfo']/div/span"))#评分
col=browser.find_elements_by_xpath("//div[@class='commentItem']/div[@class='contentInfo']/div/span")
wait.until(lambda driver:driver.find_elements_by_xpath("//div[@class='commentItem']//div[@class='commentDetail']"))
col2=browser.find_elements_by_xpath("//div[@class='commentItem']//div[@class='commentDetail']")#评价
wait.until(lambda driver:driver.find_elements_by_xpath("//div[@class='commentItem']//div[@class='commentTime']"))
col3=browser.find_elements_by_xpath("//div[@class='commentItem']//div[@class='commentTime']")#时间
for j in range(0,len(col)):
data=[]
data.append(col[j].text)
data.append(col2[j].text)
data.append(col3[j].text)
datalist.append(data)
except Exception as error:
print(error)
try:
wait=ui.WebDriverWait(browser,wait_name)
button=browser.find_element_by_xpath("//li[@title='下一页']")
button.click()
except Exception as error:
print(error)
#3.保存数据
book=xlwt.Workbook(encoding="utf-8",style_compression=0)#创建Workbook对象
sheet=book.add_sheet('东方明珠评价',cell_overwrite_ok=True)#创建工作表
colls=("评分","评价","时间")
for i in range(0,3):
sheet.write(0,i,colls[i])
for i in range(0,len(datalist)):
data=datalist[i]
for j in range(0,3):
sheet.write(i+1,j,data[j])
book.save("D:/携程东方明珠评价.xls")
我在我自己本机环境运行是成功的。下面对几个代码进行解释。
(1)爬取的地址
url=f'https://you.ctrip.com/sight/shanghai2/762.html'
(2)插件位置
#打开浏览器
path='D:/chromdriver/1/chromedriver.exe'
browser=webdriver.Chrome(executable_path=path)
browser.get(url)
browser.implicitly_wait(10)
(3)爬取的位置(这一块是用XPath进行定位的)
wait.until(lambda driver:driver.find_elements_by_xpath("//div[@class='commentItem']/div[@class='contentInfo']/div/span"))#评分
col=browser.find_elements_by_xpath("//div[@class='commentItem']/div[@class='contentInfo']/div/span")
wait.until(lambda driver:driver.find_elements_by_xpath("//div[@class='commentItem']//div[@class='commentDetail']"))
col2=browser.find_elements_by_xpath("//div[@class='commentItem']//div[@class='commentDetail']")#评价
wait.until(lambda driver:driver.find_elements_by_xpath("//div[@class='commentItem']//div[@class='commentTime']"))
col3=browser.find_elements_by_xpath("//div[@class='commentItem']//div[@class='commentTime']")#时间
for j in range(0,len(col)):
data=[]
data.append(col[j].text)
data.append(col2[j].text)
data.append(col3[j].text)
datalist.append(data)
(4)点击下一页,翻页查询
wait=ui.WebDriverWait(browser,wait_name)
button=browser.find_element_by_xpath("//li[@title='下一页']")
button.click()
3.可能出现的问题
这个问题就是chromedriver.exe与谷歌的版本对不上,请检查版本。