2017-01-22 23 views
1

Amazonの検索結果ページを解析しようとしています。 <li>タグに含まれるデータにアクセスするには、<id=result_0>,<id=result_1><id=result_2>などがあります。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件の結果が含まれています。だから私は問題がBeautifulSoupオブジェクトではなく、find_allのステップにあると思っているのです。

ここに何が起こっているのか、誰かがこのウェブページのすべての検索結果にアクセスできるように助けてくれれば、本当に感謝しています!

答えて

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が"' 'クラス_ = 'sのを使用してアクセスすることができることを知りませんでした-result-item''を 'celwidget'なしにします。ご協力いただきありがとうございます! – dmzavelsky

0

idの代わりにclassを使用してli要素に直接アクセスできます。これにより、各li要素のテキストが出力されます。アウト

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