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

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爬虫练习-爬下的数据保存_第1张图片

python爬虫练习-爬下的数据保存_第2张图片

你可能感兴趣的:(python爬虫练习-爬下的数据保存)