2017-11-26 33 views
-1

I'm having some trouble scraping specific content from the following webpage.<a href> tags in Python

http://www.librarything.com/search.php?search=The+Fellowship+of+the+Ring

私は最初の本の「仕事」の数である必要があるデータをスクレイピング:http://prntscr.com/hfkiku

私は美しいスープとSeleniumを使用してみましたし、その情報を取得する方法を見つけることができませんでしたが、 。

ご了承ください。

編集:コードが添付されています。

def getWebpage(bookName): 
    #website = 'http://www.librarything.com/title/' + bookName 
    website = 'http://www.librarything.com/search.php?search=The+Fellowship+of+the+Ring' 
    #print(website) 

    http = urllib3.PoolManager() 

    request = http.request('GET', website) 

    soup = BeautifulSoup(request.data) 

    websiteP = soup.prettify() 

    driver = webdriver.Chrome() 
    driver.get(website) 

    delay = 5 

    try: 
     WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'p.item'))) 
     print('Page is Ready!') 
     for element in driver.find_elements_by_css_selector('p.item'): 
      print(element.text) 
    except TimeoutException: 
     print('couldnt load page') 
    finally: 
     driver.quit() 

htmlの結果:

Page is Ready! 
The Fellowship of the Ring: Being the First Part of The Lord of the Rings by J.R.R. Tolkien 
The Lord of the Rings: The Fellowship of the Ring [2001 film] by Peter Jackson 
The Fellowship of the Ring 
The Fellowship of the Ring Journeybook by Matthew Ward 
The Fellowship of the ring by J.R.R. Tolkien 
The Fellowship of the Ring by J. R. R. 
The Fellowship of the Ring Sourcebook by decipherrpg 
The Lord of the Rings: The Fellowship of the Ring: Original Motion Picture Soundtrack by Howard Shore 
The Fellowship of the Ring by Coleman Charlton 
The Fellowship of the Ring {American dramatization} by J.R.R. Tolkien 
The Fellowship of the Ring by aa 
The Fellowship of the Ring Insiders' Guide (The Lord of the Rings Movie Tie-In) by Brian Sibley 
The Lord of the Rings {complete} by J.R.R. Tolkien 
The Hobbit and The Lord of the Rings by J.R.R. Tolkien 
The Fellowship of the Ring by John Ronald Reuel Tolkien; Alan Lee 
J.R.R. Tolkien Reads and Sings The Hobbit and The Fellowship of the Ring by J.R.R. Tolkien 
The Fellowship of the Ring - Part One - Ballantine 
The Fellowship of the Ring {unspecified} 
The Fellowship Of The Ring Isbn 0261102311 
The Fellowship of the Ring [Videorecording] 
The Fellowship of the Ring Sourcebook (The Lord of the Rings Roleplaying Game) by Decipher RPG 
The Fellowship of the Ring Book One 
The Lord of the Rings: The Fellowship of the Ring: Piano, Vocal, and Chords by Howard Shore 

は少し周りのコードを変更しようとしましたが、私はどこに行くことができませんでした。

+2

はい、BeautifulSoupはこれを達成するために必要なツールです。それを使用する方法を説明する公式のドキュメントと多くのチュートリアルがあります。ここではチュートリアルを書いたり、人や他のオフサイトのリソースにリンクしたりすることはありません。だから、 "BeautifulSoupチュートリアル"のようなものをGoogleだけで利用すれば、役に立つ情報がたくさん得られます。最初に学習する必要があるのは、サイトのページを実際に取得する方法です。これはやりにくいことではありません。もう一度、これに関する多くのチュートリアルがあります。 「Pythonの要求」を探してみてください。 – ForceBru

+0

ところで、それはセレンでもできます。 –

+0

@ForceBru 私は美しいスープのための複数のチュートリアルを見てきましたが、何も働いていませんでした。これは私が使ったアプローチです:http://prntscr.com/hfl5yi 問題は、ページのhtmlを印刷するときに、作業番号のタグが表示されないことです。なぜ私は正確にはわからない。 – Univold

答えて

0

これはdriver.page_sourceが予想されるHTMLを表示しない場合の1つですが、bodyタグのinnerHTMLを選択すると、期待しているものが得られます。

from selenium import webdriver 
from bs4 import BeautifulSoup 
import time 

#driver = webdriver.Firefox() 
driver = webdriver.Chrome() 
url = "http://www.librarything.com/search.php?search=The+Fellowship+of+the+Ring" 
driver.get(url) 
time.sleep(5) 

#This next line does not show the expected html. 
# print (driver.page_source) 

# But this finds it. 
body = driver.find_element_by_tag_name("body").get_attribute('innerHTML') 
driver .quit() 
soup = BeautifulSoup(body, "html.parser") 
ps = soup.find_all("p", {"class": "item"}) 
for p in ps: 
    print (p.find("a")['href'].split('/')[2]) 

出力:

3203347 
1354927 
20066223 
4819791 
7170476 
... 

P.S.ようこそStackOverflowへアドバイスをお願いします。あなたの質問にあなたのコードを投稿してください。あなたのコードをより良く受け取ることができます。スクリーンショットイメージに簡単にコピーできないコードを他の人が簡単に実行できます。 IDE。

+0

ご協力ありがとうございました。 ちょっと質問がありました。この方法に代わるより速い方法がありますか?私は基本的に基本的な本の推薦システムを作っていますので、このメソッドを使うのに時間がかかりそうな、たくさんの異なる本の番号が必要になります。 – Univold

+0

はい、それはもう少しプログラミングです:Scream https://scrapy.org/を使用して、Splash https://github.com/scrapy-plugins/を介して、セレニウムまたはScrapy&JavaScript統合のいずれかでウェブサイトのすべての書籍を取得してくださいscrapy-splashについてはhttps://stackoverflow.com/questions/17975471/selenium-with-scrapy-for-dynamic-pageを参照してください。この回答が元の質問に答えた場合は、それを受け入れることを忘れないでください。 –

関連する問題