pathon爬取豆瓣纸书

作者: 有苦向瓜诉说 | 来源:发表于2017-03-08 20:09 被阅读0次

    用python爬取豆瓣纸书,先来代码:

    from bs4 import BeautifulSoup
    import bs4
    import requests
    
    def getHtmlText(url):
        try:
            r=requests.get(url,timeout=30)
            r.raise_for_status()
            r.encodin=r.apparent_encoding
            return r.text
        except:
            return ""
    
    def fillBookList(BookList,html):
        soup=BeautifulSoup(html,'html.parser')
        ul=soup.find('div','tab-list book-show-wrap').ul
        for li in ul.children:
            if isinstance(li,bs4.element.Tag):
                BookList.append(li.find('h3').string)
    
    def printBookList(BookList,num):
        tple="{0:{1}^10}"
        print(tple.format('书籍',chr(12288)))
        for i in range(num):
            print(tple.format(BookList[i],chr(12288)))
    
    def main():
        book=[]
        url='https://market.douban.com/book/?platform=web&channel=book_nav&page=1&page_num=20&'
        html=getHtmlText(url)
        fillBookList(book,html)
        printBookList(book,20)
    
    main()
    

    中间有两个注意点,第一个时要注意找各种子节点时要分析html源码,第一次写的时候,随便找了个ul,但html中有很多ul,这时就要找到 div的ul再往下推,其次,需要判断li是不是一个Tag,之后才是得到string。

    第二个是输出问题,为了是输出更美观,应该用str.format方法,其中特别是中文空格和西文空格占的宽度不一样,如果前面的东西都是中文,空格也应该是用中文空格来使得居中,对齐变得更加美观
    空格默认为西文空格,中文空格代码为 chr(12288)

    format方法小结:
    #输出基本用法
    print('{0},{1}'.format('zhangk', 32))

    print('{},{},{}'.format('zhangk','boy',32))
     
    print('{name},{sex},{age}'.format(age=32,sex='male',name='zhangk'))
    
    
    # 格式限定符
    # 它有着丰富的的“格式限定符”(语法是{}中带:号),比如:
     
    # 填充与对齐
    # 填充常跟对齐一起使用
    # ^、<、>分别是居中、左对齐、右对齐,后面带宽度
    # :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充,,可改为中文空格
     
    print('{:>8}'.format('zhang'))
    print('{:0>8}'.format('zhang'))
    print('{:a<8}'.format('zhang'))
    print('{:p^10}'.format('zhang'))
     
    # 精度与类型f
    # 精度常跟类型f一起使用
    print('{:.2f}'.format(31.31412))
     
    # 其他类型
    # 主要就是进制了,b、d、o、x分别是二进制、十进制、八进制、十六进制
    print('{:b}'.format(15))
     
    print('{:d}'.format(15))
     
    print('{:o}'.format(15))
     
    print('{:x}'.format(15))
     
    # 用逗号还能用来做金额的千位分隔符
    print('{:,}'.format(123456789))
    

    相关文章

      网友评论

        本文标题:pathon爬取豆瓣纸书

        本文链接:https://www.haomeiwen.com/subject/nfkigttx.html