美文网首页
python爬虫练习-爬下的数据保存

python爬虫练习-爬下的数据保存

作者: Cookie_hunter | 来源:发表于2018-03-31 17:15 被阅读0次

    with open()语句

    结构

    with open(name,mode,encoding) as file:
       file.writen()
    

    name:包含文件名称的字符串,可指定路径,如'C:\Users\38153\Desktop\文件名.文件格式',如果不加路径,它将会保存在你当前工作目录中。

    mode:决定了打开文件的模式,只读/写入/追加等,
    r------------------------只读。若不存在文件会报错
    w-----------------------只写。若不存在文件会自动新建
    a-----------------------附加到文件尾

    encoding:表示要写入的编码方式,一般为utf-8或gbk

    file:表示我在代码中对文件的命名。

    以爬取豆瓣图书top250为例

    # -*-coding:utf-8-*-
    import requests
    from lxml import etree
    import time
    count = 1           #计数器
    
    with open('test.txt','w',encoding = 'utf-8') as f: 
        #一页25本书,一共10页,循环十次。
        for i in range(10):
            #第一页:https://book.douban.com/top250?start=0
            #第二页:https://book.douban.com/top250?start=25
            #第三页:https://book.douban.com/top250?start=50
            #。。。以此类推得:
            url = 'https://book.douban.com/top250?start={}'.format(i*25)
    
    
            data = requests.get(url).text               #获取页面的text
            s = etree.HTML(data)                        #解析data
    
            books = s.xpath('/html/body/div[3]/div[1]/div/div[1]/div/table')
    
            #print(scores)
            for div in books:
                
                name = div.xpath('./tr/td[2]/div[1]/a/@title')[0]
                athor= div.xpath('./tr/td[2]/p[1]/text()')[0]
                score = div.xpath('./tr/td[2]/div[2]/span[2]/text()')[0]
                quote = div.xpath('./tr/td[2]/p[2]/span/text()')
    
                print(count)
                #有的文章没有qoute部分
                if len(quote)>0:
                    #print("title:{}\tathor:{}\nscore:{}\tquote:{}\n\n".format(name,athor,score,quote)
                    #直接输入上文会产生问题,加上  .encode('GBK','ignore').decode('GBk') 也就是先用gbk编码,
                    #忽略掉非法字符,然后再译码
                    f.write("title:{}\tathor:{}\nscore:{}\tquote:{}\n\n".format(name,athor,score,quote).encode('GBK','ignore').decode('GBk'))
                else:
                    f.write("title:{}\tathor:{}\nscore:{}\n\n".format(name,athor,score))
                count += 1              #计数器加一
    

    效果


    相关文章

      网友评论

          本文标题:python爬虫练习-爬下的数据保存

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