我正在设计一个Python代码,使用Selify库来收集e-Dreams平台上可用的酒店数据。代码的目的是收集一些数据,如标题和当前价格,将它们存储在列表中,然后创建一个数据集。问题是,代码会运行,但在某些执行中,价格数据被正确存储,而其他时候则不正确。这是通过最后的指纹识别出来的。你知道为什么会这样吗?有可能有防刮擦的措施
import selenium
import requests
import os
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.chrome.options import Options
import pandas as pd
from datetime import date
import time
from selenium.webdriver.common.by import By
opts=Options()
opts.add_argument("user-agent=Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36")
driver=webdriver.Chrome("C:\Program Files (x86)\chromedriver.exe", chrome_options=opts)
link='https://hotels.edreams.com/searchresults.html?aid=350435&checkin=2022-11-30&checkout=2022-12-01&ctoken=JfaDoWzscPcWaAMp8gw419frpsZ1zq0hhSN70OhXDJn3rXElJMlalObVxI1Y8fIJ2USoEpG_paizTh6YXrsxIRE3Vd8VdsRuWcL1BjSLkEWEGCS9n_miFb3LqswF5npXnOo2kWB_BcwuzzFUqUDsGIVUkQqBp5I3uQHxjE2ixEreVopkod_PsP7q1AXBD02SDe3zGSBdgKCpmWS1g2aiVThU6mWfLql3URPKRhweuZPevAra2DVMGnPcwrzLhlfPY6lE1uoLQWgOkZrdiu64IkegbctyGWuZzd3JpoBIZHWr2oti7CZOyDYUPnknJcG0bDC6OjSFQ6J1ZW6on3BjILPK9Wq0E_JKqrMs4IH0IRF96Txf4E_MtWNi34JLK5n5fQlqcc5UynwtQszkNFF0W7t6GKTvtAfQfW1Srwj3Rn8894DbBLnbtDfOOgs&dest_id=-2601889&dest_type=city&fp_referrer_aid=308918&group_adults=1&group_children=0&label=edr-link-com-sb-conf-pc-of&lang=en-gb&no_rooms=1&selected_currency=EUR&si=ai%2Cco%2Cci%2Cre%2Cdi&sp_plprd=UmFuZG9tSVYkc2RlIyh9YVXcKaaJl1ClKWK-8iYFdtMHKztuOGDCrZfdqiRGdeskuj-OEKqKFdayZs2UNKGuqQQHOdEClFirVT_0eoZ8amf7u6qjvNJ_hAHMLhfjuMoQH81__grdeE3tynZUX-P9WQ&ss=London%2C%20Greater%20London%2C%20United%20Kingdom&submit=Search%20hotels&utm_campaign=%28organic%29&utm_medium=organic&utm_source=google&utm_term=edreams&'
page=BeautifulSoup(driver.page_source,'html.parser')
hotel_name=[]
price_now=[]
for i in page.findAll('div',attrs={'class':'d20f4628d0'}):
title=i.find("div",attrs={'fcab3ed991 a23c043802'})
if title:
hotel_name.append(title.text)
else: hotel_name.append('')
price=i.find("span",attrs={'class':'fcab3ed991 fbd1d3018c e729ed5ab6'})
if price:
price_now.append(price.text)
else: price_now.append('')
df=pd.DataFrame({'Name':hotel_name,
'Price':price_now})
driver.quit()
在这里您可以看到价格的类别
Actual price
我已经运行了几次代码,根本没有任何更改,在某些情况下,价格存储在数据集中,而在另一些情况下则不是。其他变量不会发生这种情况,只有价格会发生这种情况。
1条答案
按热度按时间rdlzhqv91#
尝试首先使用XPath查找包含价格的div:
在这个包含价格的跨度的div中,可以找到它们:
我怎么看,如果两个跨,第一个是老的
我在浏览器中直接写,语法错误可能是
请看我在此页面上的div。你需要找到它,然后找到它里面的跨度