首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BeautifulSoup找不到元素

BeautifulSoup找不到元素
EN

Stack Overflow用户
提问于 2016-01-11 00:13:28
回答 1查看 1.4K关注 0票数 2

我试图写一个程序,提取以下网站的价格。我正在用selenium下载站点,然后尝试用漂亮的汤或selenium本身来解析它。

我确定我想要的信息总是class="totalPrice“,我想把它们全部提取出来,最好是作为一个列表。

代码语言:javascript
复制
<td class="totalPrice" colspan="3">
Total: £560
<span class="sr_room_reinforcement"></span>
</td>

由于某些原因,下面的查询永远找不到任何totalPrice。如果我做错了任何建议,我们将不胜感激。

代码语言:javascript
复制
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup as bs

url='http://www.booking.com/searchresults.en-gb.html?label=gen173nr-17CAEoggJCAlhYSDNiBW5vcmVmaFCIAQGYAS64AQTIAQTYAQHoAQH4AQs;sid=1a43e0952558ac0ad0061d5b6523a7bc;dcid=1;checkin_monthday=4;checkin_year_month=2016-2;checkout_monthday=11;checkout_year_month=2016-2;city=-2601889;class_interval=1;csflt=%7B%7D;group_adults=7;group_children=0;highlighted_hotels=1192837;hp_sbox=1;label_click=undef;no_rooms=1;review_score_group=empty;room1=A%2CA%2CA%2CA%2CA%2CA%2CA;sb_price_type=total;score_min=0;si=ai%2Cco%2Cci%2Cre%2Cdi;ss=London;ssafas=1;ssb=empty;ssne=London;ssne_untouched=London&;order=price_for_two'
driver = webdriver.PhantomJS(r"C:\\Program Files (x86)\\phantomjs-2.0.0-windows\\bin\\phantomjs.exe")
#driver = webdriver.Firefox()
driver.get(url)

# for elm in driver.find_element_by_class_name("totalPrice"):
#     print(elm.text)

content = driver.page_source
soup = bs(content, 'lxml')
for e in soup.find_all('totalPrice'):
    print(e.name)

driver.close()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-11 00:26:06

首先,你需要等待总价格何时才能上船。使用带有WebDriverWait预期条件的precense_of_element_located类。

我还发现,通过使用所需的功能覆盖浏览器的PhantomJS,您需要假装不是User-Agent

完整的工作代码:

代码语言:javascript
复制
from selenium import webdriver
from selenium.webdriver import DesiredCapabilities
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup as bs

url = 'http://www.booking.com/searchresults.en-gb.html?label=gen173nr-17CAEoggJCAlhYSDNiBW5vcmVmaFCIAQGYAS64AQTIAQTYAQHoAQH4AQs;sid=1a43e0952558ac0ad0061d5b6523a7bc;dcid=1;checkin_monthday=4;checkin_year_month=2016-2;checkout_monthday=11;checkout_year_month=2016-2;city=-2601889;class_interval=1;csflt=%7B%7D;group_adults=7;group_children=0;highlighted_hotels=1192837;hp_sbox=1;label_click=undef;no_rooms=1;review_score_group=empty;room1=A%2CA%2CA%2CA%2CA%2CA%2CA;sb_price_type=total;score_min=0;si=ai%2Cco%2Cci%2Cre%2Cdi;ss=London;ssafas=1;ssb=empty;ssne=London;ssne_untouched=London&;order=price_for_two'

# setting a custom User-Agent
user_agent = (
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) " +
    "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36"
)

dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = user_agent

driver = webdriver.PhantomJS(desired_capabilities=dcap)
driver.get(url)

# wait for the total prices to become present
WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".totalPrice")))

content = driver.page_source
driver.close()

soup = bs(content, 'lxml')
for e in soup.select('.totalPrice'):
    print(e.text.strip())

它打印:

代码语言:javascript
复制
Total: US$781
Total: US$814
Total: US$831
Total: US$864
Total: US$895
Total: US$914
Total: US$915
Total: US$967
Total: US$1,031

顺便说一句,你并不需要BeautifulSoup -你可以selenium -它是相当强大的。以下是如何确定总价格的方法:

代码语言:javascript
复制
for price in driver.find_elements_by_css_selector(".totalPrice"):
    print(price.text.strip())
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34712351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档