python
  • python-2.7
  • web-scraping
  • beautifulsoup
  • 2013-05-04 99 views 3 likes 
    3

    我已經寫以下Python代碼來提取項目的價格從flipkart.comFlipkart.com產品的「價格」和產品使用Python

    import urllib2 
    import bs4 
    import re 
    
    item="Wilco Classic Library: Autobiography Of a Yogi (Hardcover)" 
    item.replace(" ", "+") 
    link = 'http://www.flipkart.com/search/a/all?query={0}&vertical=all&dd=0&autosuggest[as]=off&autosuggest[as-submittype]=entered&autosuggest[as-grouprank]=0&autosuggest[as-overallrank]=0&autosuggest[orig-query]=&autosuggest[as-shown]=off&Search=%C2%A0&otracker=start&_r=YSWdYULYzr4VBYklfpZRbw--&_l=pMHn9vNCOBi05LKC_PwHFQ--&ref=a2c6fadc-2e24-4412-be6a-ce02c9707310&selmitem=All+Categories'.format(item) 
    r = urllib2.Request(link, headers={"User-Agent": "Python-urlli~"}) 
    try: 
        response = urllib2.urlopen(r) 
    except: 
        print "Internet connection error" 
    thePage = response.read() 
    soup = bs4.BeautifulSoup(thePage) 
    firstBlockSoup = soup.find('div', attrs={'class': 'fk-srch-item'}) 
    priceSoup=firstBlockSoup.find('b',attrs={'class':'fksd-bodytext price final-price'}) 
    price=priceSoup.contents[0] 
    print price 
    
    titleSoup=firstBlockSoup.find('a',attrs={'class':'fk-srch-title-text fksd-bodytext'}) 
    title=titleSoup.findAll('b') 
    print title 
    

    上述代碼時指定「標題」提取執行打印價格沒有問題。

    Rs. 138 
    

    但是如下獲得標題:

    [<b>Wilco</b>, <b>Classic</b>, <b>Library</b>, <b>Autobiography</b>, <b>Of</b>, <b>a</b>, <b>Yogi</b>, <b>Hardcover</b>] 
    

    其理由將是顯而易見,如果你有看看product page(使用「檢查元素」)

    的源代碼現在,我如何提取適當格式的TITLE以便打印:

    Wilco Classic Library: Autobiography Of a Yogi (Hardcover) 
    

    回答

    1

    只需使用text方法上titleSoup

    >>> titleSoup=firstBlockSoup.find('a',attrs={'class':'fk-srch-title-text fksd-bodytext'}) 
    >>> titleSoup.text 
    u'Wilco Classic Library: Autobiography Of a Yogi (Hardcover)' 
    

    這也將工作:

    invalid_tags = ['b'] 
    titleSoup=firstBlockSoup.find('a',attrs={'class':'fk-srch-title-text fksd-bodytext'}) 
    
    for tag in invalid_tags: 
        for match in titleSoup.findAll(tag): 
         match.replaceWithChildren() 
    print "".join(titleSoup.contents) 
    
    +0

    我只是不知道爲什麼我會想到這一點。謝啦! – SAGAR 2013-05-04 22:38:45

    +0

    沒問題,很高興它的工作。 – 2013-05-04 22:39:22

    1

    它會更容易從firstBlockSoup標籤拿到冠軍:

    >>> firstBlockSoup.attrs['data-item-name'] 
    'Wilco Classic Library: Autobiography Of a Yogi (Hardcover)' 
    
    +0

    沒了! KeyError:'data-item-name' – SAGAR 2013-05-04 22:06:48

    +0

    我用你的代碼加載了你所做的相同的URL。你的'titleSoup'元素爲我返回'None'。 – 2013-05-04 22:57:08

    +0

    這很奇怪。看完你的評論後,我執行了相同的代碼10次。 _titleSoup_元素返回__None__ 10次的兩次。 我想不出任何可能的解釋這種行爲。如果你弄清楚,讓我知道。謝謝。 – SAGAR 2013-05-04 23:47:20

    相關問題