读取csv文件

通过csv.reader()和DictReader()两个函数

reader()函数返回一个迭代器 会包含表头 通过next函数可以跳过,但是它只能通过下标访问数据;

DictReader()函数返回一个字典,不包含表头,可以通过键名访问!!


import csv
# with open('1 (2).csv','r') as fp:
#     reader=csv.reader(fp)
#     # next(reader)
#     for x in reader:
#         print(x)
with open('1 (2).csv','r') as fp:
    reader=csv.DictReader(fp)
    for i in reader:
        print(i['学生姓名'])

写入csv文件

两个方法:一个通过writer()函数 一个通过Dictwriter()函数。

writerow() writerows()

都是先将文件通过上面两个函数封装成对象,然后在对csv对象进行操作。

注意Dictwriter()有两个参数一个是文件,另一个是表头(列表),先调用writeheader()函数将表头写进去。

这两个函数都可以写入,看给的数据:如果是元组用第一个函数;给的是字典用第二个函数。


项目

项目说明:爬取豆瓣图片前十页,并用csv库存储下来。

代码如下:

import requests
import csv
from bs4 import BeautifulSoup
header={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36"
}
headers=['书名','相关信息','评分']
def spdier(url):
    resp=requests.get(url,headers=header)
    text=resp.text
    html=BeautifulSoup(text,"lxml")
    # print(html.prettify())
    alist=html.find_all('a',class_='title')
    titles=[]
    for a in alist:
        title=list(a.stripped_strings)[0]
        titles.append(title)
    infolist=html.find_all('div',class_='desc')
    infos=[]
    for info in infolist:
        info1=list(info.stripped_strings)[0]
        infos.append(info1)
    ratelist=html.find_all('span',class_='rating_nums')
    rates=[]
    for i in ratelist:
        rate=list(i.stripped_strings)[0]
        rates.append(rate)
    books=[]
    for i in range(len(rates)):
        book={
            '书名':titles[i],
            '相关信息':infos[i],
            '评分':rates[i]
        }
        books.append(book)
    return books
def csv_storage(list_books,filename):
    with open(filename,'w',encoding='utf-8',newline='') as fp:
        writer=csv.DictWriter(fp,headers)
        writer.writeheader()
        writer.writerows(list_books)
def main():
    base_url="https://www.douban.com/tag/%E5%B0%8F%E8%AF%B4/book?start={}"
    books=[]
    for i in range(0,136,15):
        url=base_url.format(i)
        book=spdier(url)
        books +=book
    csv_storage(books,'豆瓣图片.csv')
if __name__ == '__main__':
    main()

总结

今天学习了csv库存储爬取下来的数据,通过这个项目巩固了学习的内容。

爬虫实战_爬取豆瓣图书利用csv库存储的更多相关文章

  1. python网络爬虫之四简单爬取豆瓣图书项目

    一.爬虫项目一: 豆瓣图书网站图书的爬取: import requests import re content = requests.get("https://book.douban.com ...

  2. python系列之(3)爬取豆瓣图书数据

    上次介绍了beautifulsoup的使用,那就来进行运用下吧.本篇将主要介绍通过爬取豆瓣图书的信息,存储到sqlite数据库进行分析. 1.sqlite SQLite是一个进程内的库,实现了自给自足 ...

  3. Python 2.7_利用xpath语法爬取豆瓣图书top250信息_20170129

    大年初二,忙完家里一些事,顺带有人交流爬取豆瓣图书top250 1.构造urls列表 urls=['https://book.douban.com/top250?start={}'.format(st ...

  4. Python爬虫实战之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖 ...

  5. requests+正则爬取豆瓣图书

    #requests+正则爬取豆瓣图书 import requests import re def get_html(url): headers = {'User-Agent':'Mozilla/5.0 ...

  6. 爬虫之爬取豆瓣图书名字及ID

    from urllib import request from bs4 import BeautifulSoup as bs #爬取豆瓣最受关注图书榜 resp = request.urlopen(' ...

  7. 爬虫实战——Scrapy爬取伯乐在线所有文章

    Scrapy简单介绍及爬取伯乐在线所有文章 一.简说安装相关环境及依赖包 1.安装Python(2或3都行,我这里用的是3) 2.虚拟环境搭建: 依赖包:virtualenv,virtualenvwr ...

  8. Python爬虫实例:爬取豆瓣Top250

    入门第一个爬虫一般都是爬这个,实在是太简单.用了 requests 和 bs4 库. 1.检查网页元素,提取所需要的信息并保存.这个用 bs4 就可以,前面的文章中已经有详细的用法阐述. 2.找到下一 ...

  9. Python爬虫入门:爬取豆瓣电影TOP250

    一个很简单的爬虫. 从这里学习的,解释的挺好的:https://xlzd.me/2015/12/16/python-crawler-03 分享写这个代码用到了的学习的链接: BeautifulSoup ...

随机推荐

  1. vue卸载与安装+vue创建项目

    vue卸载 npm uninstall -g vue-cli npm install -g @vue/cli 和 npm install -g @vue/cli-init 命令安装新版本vue-cli ...

  2. php将数据写入另外一个文件

    有时候,为了验证PHP的运行过程或者了解代码中的变量的使用情况,需要将变量写到另外一个文件中,方便我们查看.最近也是经常用到file_put_contents这个函数,因为只是试验用,暂时还不需要考虑 ...

  3. tp5 自定义公共函数,前台模板调用

    最近用tp5做一个cms,在添加模型的时候,选择类型,这类型太多了,如果一个个的去判断显示,能累死人了,干脆写个公共方法, 首先写公共方法用到Common.php,目录project/applicat ...

  4. js 获取年月日

    虽然网上关于这个的方法很多 但是自己还是总结了一个比较可用的方法 var date=new Date(); var year=date.getFullYear(); ); var day=change ...

  5. vue 每20秒刷新1次接口的实现方法

    实现代码: setInterval(() => { setTimeout(fun, ) }, ) 备注: setInterval 放在内层 长时间会影响性能,造成页面卡顿甚至崩溃, 内层配合se ...

  6. Scrapy模拟登陆

    1. 为什么需要模拟登陆? #获取cookie,能够爬取登陆后的页面 2. 回顾: requests是如何模拟登陆的? #1.直接携带cookies请求页面 #2.找接口发送post请求存储cooki ...

  7. POJ 2142 The Balance(exgcd)

    嗯... 题目链接:http://poj.org/problem?id=2142 AC代码: #include<cstdio> #include<iostream> using ...

  8. 使用SSH客户端远程登录Linux主机

    使用SSH客户端远程登录Linux主机(可替代samba.ftp服务) . Linux系统起初就是为多用户而产生的,可以允许多个用户同时登录linux主机各自进行操作,如图1所示: 图1 SSH(Se ...

  9. 基于MACVLAN配置VMWARE虚拟机中容器网络

    基于MACVLAN配置VMWARE虚拟机中容器网络 测试部环境组 201711 0 文档说明 MACVLAN是docker的一种支持跨主机网络的driver.macvlan本身是linux kerne ...

  10. VMwarePro密钥

    VMware10Pro密钥 5F29M-48312-8ZDF9-A8A5K-2AM0Z VMware12Pro密钥 5A02H-AU243-TZJ49-GTC7K-3C61N VF5XA-FNDDJ- ...