当前位置: 代码迷 >> python >> 固定html中确切的内容位置以进行Web抓取urllib2 Beautiful Soup
  详细解决方案

固定html中确切的内容位置以进行Web抓取urllib2 Beautiful Soup

热度:85   发布时间:2023-07-16 09:55:23.0

我是网络爬虫的新手,很少接触html文件系统,并且想知道是否有更好的更有效的方法来搜索网页的html版本上的所需内容。 目前,我想在这里对产品进行评论: ://www.walmart.com/ip/29701960?wmlspartner=wlpa&adid=2222222222702202200101&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')})

有了这个,我什么也看不懂。 我猜我必须给它一个准确的目的地。 有什么建议么 ?

使用AJAX调用加载评论。 您在提供的链接上找不到这些链接。 通过以下链接加载评论:

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

这样, 29701960就可以从当前资源的html源中找到29701960 ,如下所示:

<meta property="og:url" content="http://www.walmart.com/ip/29701960" />
                                                           +------+ this one

要么

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

1336来自来源:

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

使用这些值,构建上述URL并使用BeautifulSoup从那里解析数据。

我知道问题最初是关于BeautifulSoup ,但是由于您在这种特殊情况下使用它并没有获得成功,因此建议您看一下 。

Selenium使用一个真正的浏览器-您不必处理解析ajax调用的结果。 例如,以下是从第一个评论页面获取评论标题和等级列表的方法:

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浏览器( )。


另一个选择是利用 。

希望能有所帮助。

  相关解决方案