【问题标题】:BeautifulSoup does not see element , even though it is present on a pageBeautifulSoup 看不到元素,即使它出现在页面上
【发布时间】:2018-12-09 14:10:37
【问题描述】:

我正在尝试从 Airbnb 上抓取列表。每个列表都有自己的 ID。但是,下面代码的输出是None

import requests, bs4

response = requests.get('https://www.airbnb.pl/s/Girona--Hiszpania/homes?refinement_paths%5B%5D=%2Fhomes&query=Girona%2C%20Hiszpania&checkin=2018-07-04&checkout=2018-07-25&allow_override%5B%5D=&ne_lat=42.40450221314142&ne_lng=3.3245690859736214&sw_lat=41.97668610374056&sw_lng=1.7960961855829964&zoom=10&search_by_map=true&s_tag=nrGiXgWC')  
soup = bs4.BeautifulSoup(response.text, "html.parser")

element = soup.find(id="listing-18354577")
print(element)

为什么soup 没有看到这个元素,即使它已经加载到页面上?

它是否在某种类型的容器中,我需要以不同的方式刮擦?

【问题讨论】:

  • 你能把response.text的内容打印出来吗?
  • Jared,它很长,甚至不适合终端。但是上面发布的是一个工作代码,是否可以尝试一下?
  • 在下面查看我的答案 - 如果您检查 response.text 的内容,我想您会发现它不包括 listing-18354577
  • 这能回答你的问题吗? Beautiful Soup Can't Find Tags

标签: python web-scraping beautifulsoup


【解决方案1】:

ID 为 listing-18354577 的元素是在初始 HTML 页面加载到浏览器后通过 javascript 创建的。 Requests 只是一个 HTTP 客户端,而不是一个成熟的浏览器引擎,因此它不会执行最终获取该元素的 Javascript。 Requests 的响应只是页面的初始 HTML(不包括 listing-18354577)。

【讨论】:

    【解决方案2】:

    requests 不要等待 js,您可以使用 selenium 加载所有页面,然后使用 bs4 例如这样可以:

    import requests, bs4
    from selenium import webdriver
    
    # put the path to chromedriver
    driver = webdriver.Chrome('path/to/chromedriver') 
    website = "https://www.airbnb.pl/s/Girona--Hiszpania/homes?refinement_paths%5B%5D=%2Fhomes&query=Girona%2C%20Hiszpania&checkin=2018-07-04&checkout=2018-07-25&allow_override%5B%5D=&ne_lat=42.40450221314142&ne_lng=3.3245690859736214&sw_lat=41.97668610374056&sw_lng=1.7960961855829964&zoom=10&search_by_map=true&s_tag=nrGiXgWC"
    driver.get(website) 
    html = driver.page_source
    soup = bs4.BeautifulSoup(html, "html.parser")
    
    element = soup.find(id="listing-18354577")
    print(element)
    

    输出

    <div class="_1wq3lj" id="listing-18354577"> ...  #and many other data
    

    【讨论】:

    • Druta,这个爬虫是一个 Django 网络应用。由于 Selenium 需要下载网络驱动程序,有什么方法可以在网络应用程序中使用它吗?喜欢在某处托管网络驱动程序?
    猜你喜欢
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2021-10-17
    • 1970-01-01
    • 2019-03-28
    相关资源
    最近更新 更多