requests爬取数据存入MySQL

     爬取鲸鱼阅读这个网站的小说,将小说的名字、作者、类别这三个字段爬取下来存入到MySQL中


1.  首先分析网页的结构

    我们选取第一页的内容来进行解析  url = http://www.jingyu.com/search/stack?pn=1

                       

    根据我们审查元素的结果来看,所有的数据都放在ul这个标签中,每一本小说的信息都在该ul下面的li标签中,我们再进一步打开li标签

                     

和我预想的一样,我们只需要获取该页面的这个ul标签,然后再对ul标签中的每个li解析更进一步的解析即可

2.  设计数据库

     我预先想要爬取的字段只有三个,外加一个id,所以只需设置四个字段即可

下图就是我写的数据库,代码中的表名为xs,因为后面改了一下,这里知道一下就行,表放在test数据库中

  

3.  代码(这里我放出所有的代码,这个网站并没有反爬虫措施,所以我也没有写反反爬虫)

import requests
from bs4 import BeautifulSoup
import pymysql
import re

# 解析链接
def parse(url):
    html = requests.get(url)
    html = html.text
    soup = BeautifulSoup(html,'lxml')
    # 找到li标签,该标签内有两个class属性,分别为book,clearfix
    data = soup.find_all('li',{'class':{'book','clearfix'}})
    # 解析该data
    for i in data:
        name = i.h3.a.text
        zz_fl = i.p.text
        # 将得到的数据按|来拆分,拆分后为一个列表,其中有两个元素,但元素中有空格
        # 所以要使用strip来去除空格
        zz_fl = zz_fl.split('|')
        zuoze = zz_fl[0].strip()
        fenlei = zz_fl[1].strip()
        print('书名:{0}  作者:{1}  类别:{2}'.format(name,zuoze,fenlei))
        # 将得到的数据传送给MySQL
        mysql(name,zuoze,fenlei)
    # 解析完后再进行下一步解析
    next_page(url)

# 查找下一页url
def next_page(nextpage):
    # 将得到的下一页的url由自己指定
    # 匹配http://www.jingyu.com/search/stack?pn=1后面的数字
    a = re.search('pn=(.*)',nextpage).group(1)
    # 匹配http://www.jingyu.com/search/stack?pn=1数字前面的值
    # 这里我不用字符串的split('='),主要为了练习正则
    start_url=re.findall('.*pn=',nextpage)[0]
    a = int(a)
    # 总共25页,只需要爬取25页就可以
    if a<=25:
        a+=1
        nextpage = start_url + str(a)
        if a<=25:
            # 只要url还未到25页,那么就继续解析
            parse(nextpage)
        else:
            print('结束翻页')


# 定义一个类,将连接MySQL的操作写入其中
class down_mysql:
    def __init__(self,name,zuoze,fenlei):
        self.name = name
        self.zuoze = zuoze
        self.fenlei = fenlei
        self.connect = pymysql.connect(
            host = 'localhost',
            db = 'test',
            port = 3306,
            user = 'root',
            passwd = '123456',
            charset = 'utf8',
            use_unicode = False
        )
        self.cursor = self.connect.cursor()
    # 保存数据到MySQL中
    def save_mysql(self):
        sql = "insert into xs(`name`,zuoze,fenlei) VALUES (%s,%s,%s)"
        try:
            self.cursor.execute(sql,(self.name,self.zuoze,self.fenlei))
            self.connect.commit()
            print('数据插入成功')
        except:
            print('数据插入错误')

# 新建对象,然后将数据传入类中
def mysql(name,zuoze,fenlei):
    down = down_mysql(name,zuoze,fenlei)
    down.save_mysql()

if __name__ == '__main__':
    # 给定一个初始的url
    url='http://www.jingyu.com/search/stack?pn=1'
    # 解析该url
    parse(url)

4.  运行代码

 然后我们就会看到以下这些信息,等待一段时间等爬虫将数据爬取完成


等了我将近五六分钟的才把这些数据爬完


然后我们来看下数据库是否数据全部插入

看到了575条数据,看来数据是插入成功了,一页有21本小说,一共25页,算下来有525条数据,这里多了50条,我也不知道哪里多出来的,然后我就查了一下


 就万古大帝多出了一本,其它的也没看见多出来什么,脑壳疼,就不想了,哪位有时间帮我想想

接下来我就筛选了一下,发现都市的小说最多,我猜应该现在的人大部分都喜欢看都市类的吧,想当年我们那时候都是看修真类的居多,可能他们都长大了吧。


  • 3
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值