Python使用requests、BeautifulSoup库爬取图书信息,使用Pymysql导入数据库

之前准备做图书馆管理系统,就需要一些书作为图书信息,所以就是用了Python爬取了2019年畅销图书排行榜,网址是:http://www.bookschina.com/24hour/1_0_1/ 一共是34页,总共1000条数据。

为了保证是图书馆管理系统的需要,所以数据库进行了特殊的设计,下图是数据库的结构图,数据库使用的是mysql。
在这里插入图片描述

  • bookid是图书的索书号,使用了字符和数字组合而成,在Python里我做了一些特殊的处理,这个不是爬虫爬进去了,而是自己编写的代码。
  • bookname,author,price,note为别是爬取的相关数据。
  • borrow、appoint、renew分别代表着是否借出、是否预约、是否续借等,这个由于是我们最新的图书,一律赋值为0。

先附上所有的代码:

import pymysql    #导入pymysql模块 这里面模块名称可以小写
import requests
from bs4 import BeautifulSoup

acs = 65

for j in range(1,35):

    res=requests.get("http://www.bookschina.com/24hour/1_0_"+str(j)+"/")
    soup = BeautifulSoup(res.text,"html.parser")

    list1=soup.find(attrs={"class":"bookList"})

    name=list1.findAll(attrs={"class":"name"})
    author=list1.findAll(attrs={"class":"author"})
    price=list1.findAll(attrs={"class":"sellPrice"})
    note=list1.findAll(attrs={"class":"publisher"})

    db = pymysql.connect(host='localhost', user='root', passwd='sa', db='test', port=3306, charset='utf8')

    for i,na,au,p,no in zip(range(1,101),name,author,price,note):
        you = db.cursor()  # 用cursor方法获取一个操作游标you

        strid = chr(acs) + str(i)

        sql = "INSERT INTO book(bookid,bookname,author,price,note,borrow,appoint,renew) VALUES ('%s','%s','%s','%s','%s','%d','%d','%d')" % (strid,na.string,au.string,p.string,no.string,0,0,0)
        you.execute(sql)    #用execute方法执行

    acs = acs + 1
    if acs == 91 :
        acs = 97

you.close()#关闭操作游标
db.close()#释放数据库资源

数据库连接方面:

import pymysql    #导入pymysql模块 这里面模块名称可以小写
db = pymysql.connect(host='localhost', user='root', passwd='sa', db='test', port=3306, charset='utf8')
sql = "INSERT INTO book(bookid,bookname,author,price,note,borrow,appoint,renew) VALUES ('%s','%s','%s','%s','%s','%d','%d','%d')" % (strid,na.string,au.string,p.string,no.string,0,0,0)
you.execute(sql)    #用execute方法执行
you.close()#关闭操作游标
db.close()#释放数据库资源

这些基本上如果学过JDBC就应该知道如何套用这个模板了,这里port大部分默认都是3306。
sql语句还是和mysql中的语句一样,没有不同。
execute即可执行所有的语句,这里十分方便。

爬虫的实现:

由于图书有34页的总共信息,所有外面的循环,设置的range(1,35),不断换取新的网址,然后通过find确定大取余,findAll确定小区域,保存到一个列表当中,在数据库链接的时候遍历即可。

学习心得:

  1. 连接数据库这是一个比较难的过程,花费的时间也比较多,有了这些数据之后,就要继续写JavaWeb的图书管理系统了,有了书的数据,做的也会更加出色。
  2. 在导入数据库的时候,’%s’的使用是真的学到了,原本列表输出的是一个BS中的一个数据类型,通过了%s,就可以保存下来了。
  3. zip复习了,之前一直不明白如何做到多个列表一起进行操作,一直也再找理由不去看,今天使用的时候算是好好看了一遍。
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现数据采集和存储主要分为两个部分:数据采集和数据存储。其中,数据采集使用Python中的requests,数据存储使用MySQL数据库。 一、数据采集 1. 安装requests 使用pip命令安装requests: ``` pip install requests ``` 2. 发送HTTP请求 使用requests发送HTTP请求,获取网页内容。通过requests.get()方法发送GET请求,代码如下: ```python import requests url = 'https://www.example.com' response = requests.get(url) ``` 其中,url为目标网页的URL地址,response为请求返回的响应对象。 3. 解析HTML内容 获取到网页内容之后,需要对HTML内容进行解析,提取所需的数据。这里可以使用Python中的BeautifulSoup进行解析,代码如下: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'html.parser') ``` 其中,response.text为获取到的HTML内容,'html.parser'为解析器类型,可以根据实际情况选择不同的解析器。 4. 提取数据 通过BeautifulSoup提供的方法,可以很方便地提取HTML内容中的数据。这里以提取网页标题为例,代码如下: ```python title = soup.title.string ``` 其中,soup.title.string表示获取HTML中的title标签,.string表示获取标签中的文本内容。 二、数据存储 1. 安装MySQL数据库 首先需要安装MySQL数据库,可以从官网下载安装包,也可以使用apt-get等命令进行安装。 2. 连接数据库 使用Python中的pymysql连接MySQL数据库,代码如下: ```python import pymysql db = pymysql.connect(host='localhost', user='root', password='password', port=3306) cursor = db.cursor() ``` 其中,host为MySQL服务器地址,user为MySQL登录用户名,password为MySQL登录密码,port为MySQL服务器端口号。 3. 创建数据库和数据表 在MySQL数据库中创建一个新的数据库和数据表,用于存储采集到的数据。可以使用MySQL命令行或者可视化工具创建数据库和数据表。 4. 存储数据 将采集到的数据存储到MySQL数据库中,代码如下: ```python sql = 'INSERT INTO table_name (col1, col2, col3) VALUES ("%s", "%s", "%s")' % (value1, value2, value3) cursor.execute(sql) db.commit() ``` 其中,table_name为数据表名称,col1、col2、col3为数据表中的列名,value1、value2、value3为采集到的数据。execute()方法执行SQL语句,commit()方法提交事务。 完成以上操作,就可以实现数据采集和存储了。当然,具体实现还需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值