爬取豆瓣网新书传递信息,数据保存到数据库中。

爬取信息包括书名、评分、作者、出版社、出版时间、图书介绍。豆瓣图书新书速递的网址为

需要爬取的网页地址–点击

一、实例

首先我们要做的事情,是打开网页,用F12观察结构

发现该该网页没有分页,只有左右两个div盒子,但是按照以前的爬取方法,我们只能爬取一个div,那么这次的解决方法是什么呢?是要分开爬取?还是有其他的解决方法,就接着往下看吧!

这次解析网页是使用的xpath。

1,得到网页 ——get_html

def get_html(url,headers,time=10):  #get请求通用函数,去掉了user-agent简化代码try:r = requests.get(url, headers=headers,timeout=time)  # 发送请求r.encoding = r.apparent_encoding  # 设置返回内容的字符集编码r.raise_for_status()  # 返回的状态码不等于200抛出异常return r.text  # 返回网页的文本内容except Exception as error:print(error)

2,解析网页 ——parse_html

bookinfos=[]
def parse_html(html):doc=etree.HTML(html)for row in doc.xpath("//div[@id='content']//li"):bookname=row.xpath("./div/h2/a/text()")[0]score=row.xpath("./div/p[1]/span[2]/text()")[0].strip()apt=row.xpath("./div/p[2]/text()")[0].strip()aptt=apt.split('/')author=aptt[0]press=aptt[1]pubdate=aptt[2]describe=row.xpath("./div/p[3]/text()")[0].strip()bookinfo=(bookname,score,author,press,pubdate,describe)bookinfos.append(bookinfo)      

可以看出虽然是左右两个div,这时我们向上查找找到包含左右两个div的大盒子进行xpath的分析。 注意到aptt 我们用split函数进行了分割成列表,取了第1个第2个第3个值。是因为在本次要爬取的网页里面是放在一个标签里面的,我们观察它的结构发现每一个我们需要爬取值是由‘/’ 分割开的,联系我们的python语法知识 我们就可以得知 解决方案。

3,保存到mysql ——save_html

def save_html(sql,vals,**dbinfo):try:conn = pymysql.Connect(**dbinfo)cursor=conn.cursor()cursor.executemany(sql,vals)#批量处理添加数据conn.commit()print("insert success")except:conn.rollback()print("insert faild")finally:cursor.close()conn.close()

4,main函数

if __name__=="__main__":#main函数,流程设计 url='https://book.douban.com/latest?icn=index-latestbook-all'headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64)\AppleWebKit/537.36 (KHTML, like Gecko) \Chrome/89.0.4389.82 Safari/537.36"
}html=get_html(url,headers)parse_html(html)print(bookinfos)parms={"host":'localhost',"port":3306,"user":'root',"passwd":'root',"db":'beautifulsoup-sql',"charset":'utf8'}sql="insert into doubanbook(BookName,Score,Autor,Press,Pubdate,describ) values(%s,%s,%s,%s,%s,%s)"save_mysql(sql,bookinfos,**parms)

二、关系型数据库存储

**
**

关系型数据库是基于关系模式的数据库,而关系模式是通过二维表来保存的,他的储存方式就是行列组成的表,每一列是一个字段,每一行是一条记录。

1,链接数据库

pyMySQL 库的安装操作如下:

pip install pymysql

pymysql 库安装后,可在命令下进行测试,具体指令:

import pymysql
pymysql.VERSION

pymysql库提供connect() 可连接数据库,具体语法如下:

pymysql.connect(host=mysql_host,port=port,user=user,password=password,db=db,charset='')


链接数据库读写、选择、整理、描述:

2,插入数据


如果表新增字段,比如gender性别字段,sql语句则需要修改,这增加了我们的代码维护难度,这种方式及其不方便,可以传入一个动态变化的字典,插入方式不需要修改就可以增加新的字段:

(id,name,age,gender)
{'id':'12345678','name':'hdjk','age':20
}

使用动态字典插入数据,具体代码如下:

import pymysql
data={'id':'12345678','name':'hdjk','age':20
}
table ='students'  # 表名
keys=','.join(data.keys())  #得到字典的键 并用join函数把它分成一个字符串
values=','.join(['/s']*len(data))  #跟据sql语句 vaules 后面需要与字段名数相对应的/s
db=pymysql.connect(host='lcoalhost',user='root',password='root',port=3306)
cursor=db.cursor()
aql='insert into {table}({keys}) vaules ({valeus})'.format(table=table,keys=keys,values=values)
try :if cursor.execute(sql,tuple(data.values())):print('success')db.commit()
except:print('failed')db.rollback()
db.close()

3,更新数据

可想而知 构建动态字典的语句几乎一样的,在这里我们就只特定说明sql语句。

    sql= ','.join([' {keys}=%s'.format(keys=keys) for key in data])

4,删除数据

aql ='delete from {table } where {condition}'.format(table = table,condition=condition)

根据具体情况分析,try-except里面的语句也会有差微变化。

爬取豆瓣网新书传递信息,关系型数据库的储存相关推荐

  1. Python爬取豆瓣网影评展示

    Python爬取豆瓣网影评展示 需要的库文件 requests beautifulsoup wordcloud jieba matplotlib 本文思想 1.访问指定的网页 #获取指定url的内容 ...

  2. Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)

    今天我们来爬取一下豆瓣网上排名前250的电影. 需求:爬取豆瓣网上排名前250的电影,然后将结果保存至一个记事本里. 开发环境: python3.9 pycharm2021专业版 我们先观察网页,看看 ...

  3. Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(下)

    在Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)中,我们最后爬出来的结果不是很完美,这对于"精益求精.追求完美的"程序猿来说怎么能够甘心 所以,今天,用pyth ...

  4. python爬取豆瓣top250信息并存入数据库中 | sqlite3

    文章目录 代码: 遇到的问题: 1.关于数据库表格中出现:NBSP 2. 为什么HTML字段中会出现&NBSP? 3.java.io.IOException: 不能删除数据库文件 4. 关于d ...

  5. scrapy实现爬取全书网小说到Mysql数据库(附代码)

    前言 本篇文章实现python的scrapy框架爬取全书网小说,scrapy框架的安装我在这里就不在赘述了,建议window用户使用anaconda安装,这里比较省心一些.运行环境python3(实际 ...

  6. python爬取豆瓣电影信息_Python|简单爬取豆瓣网电影信息

    前言: 在掌握一些基础的爬虫知识后,就可以尝试做一些简单的爬虫来练一练手.今天要做的是利用xpath库来进行简单的数据的爬取.我们爬取的目标是电影的名字.导演和演员的信息.评分和url地址. 准备环境 ...

  7. Python|简单爬取豆瓣网电影信息

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 欢迎加入团队圈子!与作者面对面!直接点击! 前言: 在掌握一些 ...

  8. 一、网络爬虫----爬取豆瓣网前250条数据

    一.爬虫的基本流程 发起请求 通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的header等信息,等待服务器响应 获取响应内容 如果服务器能正常响应,会得到一个Res ...

  9. 爬取豆瓣网前一百名电影

    网站爬取的流程图: 实现项目我们需要运用以下几个知识点 一.获取网页 1.找网页规律: 2.使用 for 循环语句获得网站前4页的网页链接: 3.使用 Network 选项卡查找Headers信息: ...

  10. python爬虫之爬取掘金网首页存入mysql数据库

    博主是个前端小白,最近在学习爬虫,写个实战系列也是想记录自己学习的过程,以便后续回顾 欢迎大家一起交流学习.共同进步 这篇文章达成的效果是爬掘金网的首页的数据存到mysql数据库里 做这个实战你需要具 ...

最新文章

  1. JAVA写XML乱码问题_java 写 xml 中文乱码
  2. apache开启虚拟主机 并进行配置
  3. 多轮对话之对话管理:Dialog Management
  4. js日期比较大小_node.js 内存泄漏的秘密
  5. js 刷新div_vue.js备忘记录(五) vue-router
  6. c# 空接合(??)运算符的运用
  7. 2018.10.22 20:10
  8. 更新maven卡在18不动_Android Studio maven-metadata.xml 卡着不动原因和解决方法
  9. Sublime增加GBK编码格式
  10. 奥拉星插件flash下载手机版下载安装_flash插件
  11. Ubuntu系统安装教程
  12. 进阶系列(11)—— C#多线程
  13. word文件打不开怎么办?显示的是:调试,发送错误报告,不发送
  14. 【文献翻译】MDC-Checker:一种新的多域配置网络风险评估框架
  15. chmod -R 777使用.
  16. 网站设计系列:网站易用性
  17. iOS基石——UITextField
  18. 用css3实现魔方动画
  19. 【信号处理】脑机接口P300信号处理(MATLAB实现)
  20. [野狐行网游研究][三期四期][8.25更新]

热门文章

  1. 超好用的卸载工具——geek(免安装)
  2. html通过拼音首字母定位,javascript实现通过拼音首字母快速选择下拉列表
  3. Selenium认识与实战(学习版)
  4. python怎么接管浏览器_用python操作浏览器的三种方式
  5. 基于单片机控制的程控有源滤波器电路
  6. APK大小查看、定义、反编译、如何安装解压
  7. costmap代价地图学习
  8. 无线射频识别的应用方案有哪些?
  9. 《2021企业数智化转型升级服务全景图/产业图谱1.0版》重磅发布
  10. 计算机专业会学计量经济学吗,计量经济学的论文