Выделите точное местоположение содержимого в html для веб-скрепок urllib2 Beautiful Soup

Я новичок в веб-очистке, мало подвержен html-файловым системам и хотел узнать, есть ли более эффективный способ поиска необходимого содержимого в html-версии веб-страницы. В настоящее время я хочу просмотреть обзоры для продукта здесь: http://www.walmart.com/ip/29701960?wmlspartner=wlpa&adid=22222222227022069601&wl0=&wl1=g&wl2=c&wl3=34297254061&wl4=&wl5=pla&wl6=62272156621&veh=sem

Для этого у меня есть следующий код:

url = http://www.walmart.com/ip/29701960? wmlspartner=wlpa&adid=22222222227022069601&wl0=&wl1=g&wl2=c&wl3=34297254061&wl4=&wl5=pla&wl6=6227215 6621&veh=sem review_url = url #print review_url #------------------------------------------------------------------------- # Scrape the ratings #------------------------------------------------------------------------- page_no = 1 sum_total_reviews = 0 more = True while (more): #print "XXXX" # Open the URL to get the review data request = urllib2.Request(review_url) try: #print "XXXX" page = urllib2.urlopen(request) except urllib2.URLError, e: #print "XXXXX" if hasattr(e, 'reason'): print 'Failed to reach url' print 'Reason: ', e.reason sys.exit() elif hasattr(e, 'code'): if e.code == 404: print 'Error: ', e.code sys.exit() content = page.read() #print content soup = BeautifulSoup(content) results = soup.find_all('span', {'class': re.compile(r's_star_\d_0')}) 

С этим я не могу ничего читать. Я предполагаю, что я должен дать ему точное место. Какие-либо предложения ?

    Я понимаю, что вопрос был первоначально о BeautifulSoup , но поскольку вы не успели использовать его в этой конкретной ситуации, я предлагаю взглянуть на selenium .

    Selenium использует настоящий браузер – вам не нужно разбираться в результатах аякс-вызовов. Например, вот как вы можете получить список названий и рейтингов обзора с первой страницы отзывов:

     from selenium.webdriver.firefox import webdriver driver = webdriver.WebDriver() driver.get('http://www.walmart.com/ip/29701960?page=seeAllReviews') for review in driver.find_elements_by_class_name('BVRRReviewDisplayStyle3Main'): title = review.find_element_by_class_name('BVRRReviewTitle').text rating = review.find_element_by_xpath('.//div[@class="BVRRRatingNormalImage"]//img').get_attribute('title') print title, rating driver.close() 

    печатает:

     Renee Culver loves Clorox Wipes 5 out of 5 Men at work 5 out of 5 clorox wipes 5 out of 5 ... 

    Кроме того, учтите, что вы можете использовать браузер без заголовка PhantomJS ( пример ).


    Другой вариант – использовать API Walmart .

    Надеюсь, это поможет.

    Отзывы загружаются с использованием вызова AJAX. Вы не можете найти их в той ссылке, которую вы предоставили. Отзывы загружаются по следующей ссылке:

     http://walmart.ugc.bazaarvoice.com/1336/29701960/reviews.djs?format=embeddedhtml&dir=desc&sort=relevancy 

    Здесь 29701960 найден из источника html вашего текущего источника следующим образом:

      +------+ this one 

    или

     trackProductId : '29701960', +------+ or this one 

    И 1336 из источника:

     WALMART.BV.scriptPath = 'http://walmart.ugc.bazaarvoice.com/static/1336/'; +--+ here 

    Используя значения, создайте Above url и проанализируйте данные с помощью BeautifulSoup .