2017-01-22 125 views
1

我正在嘗試解析亞馬遜搜索結果頁面。我想要訪問012KB,,<id=result_2><li>標籤中包含的數據。find_all('li')函數只返回4個結果(最多result_3),我認爲這很奇怪,因爲在瀏覽器中查看網頁時,我看到12結果。爲什麼Beautifulsoup find_all沒有返回完整的結果?

當我打印parsed_html時,我發現它包含了result_23的所有內容。爲什麼find_all沒有返回所有24個對象?下面是我的代碼片段。

import requests 

try: 
    from BeautifulSoup import bsoup 
except ImportError: 
    from bs4 import BeautifulSoup as bsoup 

search_url = 'https://www.amazon.com/s/ref=nb_sb_noss_2?url=search- 
       alias%3Dstripbooks&field-keywords=data+analytics' 
response = requests.get(search_url, headers={ 
     "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 
     (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"}) 
parsed_html = bsoup(response.text) 
results_tags = parsed_html.find_all('div',attrs={'id':'atfResults'}) 
results_html = bsoup(str(results_tags[0])) 
results_html.find_all('li') 

對於什麼是值得的,results_tags對象也只包含4個結果。這就是爲什麼我認爲問題出現在find_all步驟中,而不是使用BeautifulSoup對象。

如果有人能幫我弄清楚這裏發生了什麼,以及我如何訪問此網頁上的所有搜索結果,我將非常感激!

回答

0
import requests, re 

try: 
    from BeautifulSoup import bsoup 
except ImportError: 
    from bs4 import BeautifulSoup as bsoup 

search_url = 'https://www.amazon.com/s/?url=search-%20alias%3Dstripbooks&field-keywords=data+analytics' #delete the irrelevant part from url 
response = requests.get(search_url, headers={ 
     "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36", 
     "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" }) # add 'Accept' header 
parsed_html = bsoup(response.text, 'lxml') 
lis = parsed_html.find_all('li', class_='s-result-item') # use class to find li tag 
len(lis) 

出來:

25 
+0

啊我看......我不知道'類= 「S-結果項目celwidget」'可以使用'類_ =的訪問沒有'celwidget'的結果項目。謝謝你的幫助! – dmzavelsky

0

可以直接通過class而不是id訪問li元素。這將打印來自每個li元素的文本。

results_tags = parsed_html.find_all('li',attrs={'class':'s-result-item'}) 
for r in results_tags: 
    print(r.text) 
相關問題