2016-07-01 73 views
0

我有點困惑如何做到這一點。我不確定這是否正確,但我試圖通過網址查詢搜索。我試過這樣做:Python BeautifulSoup &&請求刮搜索引擎

url = 'https://duckduckgo.com/dogs?ia=meanings' 
session = requests.session() 
r = session.get(url) 
soup = bs(r.content, 'html.parser') 

我從響應中得到一些html;但是,當我查找所有鏈接時,除了原始搜索網址外,沒有任何鏈接。

links = soup.find_all('a') 
for link in links: 
    print(link) 

<a href="https://duckduckgo.com/html/?q=dogs">here</a> 

當我在瀏覽器上的搜索和檢查的HTML代碼,所有環節存在的,但由於某種原因沒有通過我的要求會回到我身邊。

任何人都有任何想法,我試圖建立一個網絡抓取應用程序,我認爲這將是一件非常簡單的事情,我可以將其納入我的終端。

回答

2

問題是,在瀏覽器執行JavaScript代碼的幫助下,搜索結果和大部分頁面都是動態加載requests只會下載最初的靜態HTML頁面,因爲它不是瀏覽器,所以它沒有JS引擎。

你已經基本上3個主要選項:

  • 使用DuckDuckGo API(Python wrapper,可能有更好的一個 - 請重新檢查) - 此選項是首選
  • 將頁面裝入一個真正的瀏覽器通過selenium然後解析HTML,它現在與您在瀏覽器中看到的完全相同的HTML
  • 嘗試探索加載頁面並在您的BeautifulSoup + requests代碼中模擬它們的請求。這是可能涉及複雜邏輯和JavaScript代碼解析的最難和最脆弱的方法。