代码之家  ›  专栏  ›  技术社区  ›  Theory94

使用BeautifulSoup提交按钮/展开可扩展

  •  0
  • Theory94  · 技术社区  · 3 年前

    嗨,我正试着扩展这个按钮 page 使用漂亮的汤捕捉剩余的属性。这是我试图按下的按钮的html:

    <button class="button__373c0__3lYgT secondary__373c0__1bsQo" aria-expanded="false" aria-controls="expander-link-content-cf6b4b45-8720-4627-96f8-397a766b8ddb" type="submit" value="submit" style="--mousedown-x:30px; --mousedown-y:27.625px; --button-width:113.422px;"><div class=" button-content__373c0__1QNtB border-color--default__373c0__3-ifU"><span class=" text__373c0__2Kxyz button-content-text__373c0__Z-7FO text-color--inherit__373c0__1lczC text-align--center__373c0__3VrfZ text-weight--semibold__373c0__2l0fe text-size--large__373c0__3t60B text--truncated__373c0__3sLaf"><p class=" text__373c0__2Kxyz text-color--normal__373c0__3xep9 text-align--left__373c0__2XGa- text-weight--semibold__373c0__2l0fe text-size--large__373c0__3t60B">15 More Attributes</p></span></div></button>
    

    这是我迄今为止所拥有的:

    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9'}
    url = 'https://www.yelp.com/biz/lazi-cow-davis?osq=lazi+cow'
    response = requests.get(url, headers=headers)
    
    sub_response = requests.get(sub_url, headers=headers)
    sub_soup = BeautifulSoup(sub_response.content, 'lxml')
    
    for item in sub_soup.select('section'):
        if item.find('h4'):
           name = item.find('h4').get_text()
           if name == "Amenities and More":
              tests = item.find_all('span')
              for span in tests:
                  print(span.get_text())
    

    我知道你可以使用Yelp API进行抓取,但我需要对+1000个不同的Yelp站点进行抓取,所以我想知道是否有一个解决方法,因为我目前的方法有效(我稍后会添加代理),只是不适用于所有属性

    0 回复  |  直到 3 年前
        1
  •  0
  •   Matteo Bianchi    3 年前

    您可以尝试使用Selenium:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    
    driver = webdriver.Chrome('/Users/Downloads/chromedriver')
    
    driver.implicitly_wait(30)
    
    driver.find_element_by_xpath("//button[@class='button__373c0__3lYgT secondary__373c0__1bsQo activated__373c0__1moG8 ']").click()
    
    for x in driver.find_elements_by_xpath("//div[@class=' arrange__373c0__2C9bH gutter-2__373c0__1DiLQ vertical-align-baseline__373c0__3HGi9 border-color--default__373c0__3-ifU']"):
        print(x.text)
    

    告诉我这是否有帮助。

        2
  •  0
  •   Fabix    3 年前

    BeautifulSoup主要用于网络抓取,仅此而已。

    如果你需要与网页交互,比如点击按钮、滚动等,你需要使用浏览器。 会帮助你的