爬取豆瓣网新书传递信息,关系型数据库的储存
爬取豆瓣网新书传递信息,数据保存到数据库中。
爬取信息包括书名、评分、作者、出版社、出版时间、图书介绍。豆瓣图书新书速递的网址为
需要爬取的网页地址–点击
一、实例
首先我们要做的事情,是打开网页,用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里面的语句也会有差微变化。
爬取豆瓣网新书传递信息,关系型数据库的储存相关推荐
- Python爬取豆瓣网影评展示
Python爬取豆瓣网影评展示 需要的库文件 requests beautifulsoup wordcloud jieba matplotlib 本文思想 1.访问指定的网页 #获取指定url的内容 ...
- Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)
今天我们来爬取一下豆瓣网上排名前250的电影. 需求:爬取豆瓣网上排名前250的电影,然后将结果保存至一个记事本里. 开发环境: python3.9 pycharm2021专业版 我们先观察网页,看看 ...
- Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(下)
在Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)中,我们最后爬出来的结果不是很完美,这对于"精益求精.追求完美的"程序猿来说怎么能够甘心 所以,今天,用pyth ...
- python爬取豆瓣top250信息并存入数据库中 | sqlite3
文章目录 代码: 遇到的问题: 1.关于数据库表格中出现:NBSP 2. 为什么HTML字段中会出现&NBSP? 3.java.io.IOException: 不能删除数据库文件 4. 关于d ...
- scrapy实现爬取全书网小说到Mysql数据库(附代码)
前言 本篇文章实现python的scrapy框架爬取全书网小说,scrapy框架的安装我在这里就不在赘述了,建议window用户使用anaconda安装,这里比较省心一些.运行环境python3(实际 ...
- python爬取豆瓣电影信息_Python|简单爬取豆瓣网电影信息
前言: 在掌握一些基础的爬虫知识后,就可以尝试做一些简单的爬虫来练一练手.今天要做的是利用xpath库来进行简单的数据的爬取.我们爬取的目标是电影的名字.导演和演员的信息.评分和url地址. 准备环境 ...
- Python|简单爬取豆瓣网电影信息
欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 欢迎加入团队圈子!与作者面对面!直接点击! 前言: 在掌握一些 ...
- 一、网络爬虫----爬取豆瓣网前250条数据
一.爬虫的基本流程 发起请求 通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的header等信息,等待服务器响应 获取响应内容 如果服务器能正常响应,会得到一个Res ...
- 爬取豆瓣网前一百名电影
网站爬取的流程图: 实现项目我们需要运用以下几个知识点 一.获取网页 1.找网页规律: 2.使用 for 循环语句获得网站前4页的网页链接: 3.使用 Network 选项卡查找Headers信息: ...
- python爬虫之爬取掘金网首页存入mysql数据库
博主是个前端小白,最近在学习爬虫,写个实战系列也是想记录自己学习的过程,以便后续回顾 欢迎大家一起交流学习.共同进步 这篇文章达成的效果是爬掘金网的首页的数据存到mysql数据库里 做这个实战你需要具 ...
最新文章
- JAVA写XML乱码问题_java 写 xml 中文乱码
- apache开启虚拟主机 并进行配置
- 多轮对话之对话管理:Dialog Management
- js日期比较大小_node.js 内存泄漏的秘密
- js 刷新div_vue.js备忘记录(五) vue-router
- c# 空接合(??)运算符的运用
- 2018.10.22 20:10
- 更新maven卡在18不动_Android Studio maven-metadata.xml 卡着不动原因和解决方法
- Sublime增加GBK编码格式
- 奥拉星插件flash下载手机版下载安装_flash插件
- Ubuntu系统安装教程
- 进阶系列(11)—— C#多线程
- word文件打不开怎么办?显示的是:调试,发送错误报告,不发送
- 【文献翻译】MDC-Checker:一种新的多域配置网络风险评估框架
- chmod -R 777使用.
- 网站设计系列:网站易用性
- iOS基石——UITextField
- 用css3实现魔方动画
- 【信号处理】脑机接口P300信号处理(MATLAB实现)
- [野狐行网游研究][三期四期][8.25更新]