>

이 페이지 ?

<h2 class="entry-title">
<a href="http://www.allitebooks.com/deep-learning-with-python-2/" rel="bookmark">Deep Learning with Python</a>
</h2>

내가 시도한 것은 href를 얻지 못한다 :

title = driver.find_elements_by_class_name('entry-title')
title[0].get_attribute('href')

"a"태그에 대한 링크를 얻지 못했습니다. 그리고 "a"태그에서 모든 요소를 ​​찾으면 페이지의 모든 href를 반환합니다 (원하는 것이 아닙니다). 위와 같이 제목 만 반환하고 url "href"속성을 가져올 수 있습니다.


  • 답변 # 1

    여기 모든 페이지에서 모든 책을 가져 오는 코드 :

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    driver = webdriver.Chrome()
    baseUrl = "http://www.allitebooks.com/page/1/?s=python"
    driver.get(baseUrl)
    # wait = WebDriverWait(driver, 5)
    # wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".search-result-list li")))
    # Get last page number
    lastPage = int(driver.find_element(By.CSS_SELECTOR, ".pagination a:last-child").text)
    # Get all HREFs for the first page and save them in hrefs list
    js = 'return [...document.querySelectorAll(".entry-title a")].map(e=>e.href)'
    hrefs = driver.execute_script(js)
    # Iterate throw all pages and get all HREFs of books
    for i in range(2, lastPage):
        driver.get("http://www.allitebooks.com/page/" + str(i) + "/?s=python")
        hrefs.extend(driver.execute_script(js))
    for href in hrefs:
        print(href)
    
    

  • 답변 # 2

    셀레늄은 당신이 필요로하는 과잉 일 수 있습니다. 오래된 OldSoapSoup도 그 기술을 사용합니다.

    import urllib.request, bs4
    body = urllib.request.urlopen(urllib.request.Request("http://www.allitebooks.com/page/1/?s=python", headers={"User-Agent": "Mozilla"})).read().decode("utf-8")
    soup = bs4.BeautifulSoup(body)
    for element in soup.find_all("h2", class_="entry-title"):
        for link in element.find_all("a"):
            print(link.get("href"))
    
    

관련 자료

  • 이전 xml - XSLT 20에서 자식 노드를 포함하여 노드를 재정렬하는 방법
  • 다음 javascript - 경로로 값을 보내는 방법 - reactjs