欢迎光临
我们一直在努力

爬虫实战 | 完整项目代码

文章目录

项目功能

根据用户提供的ISBN号去爬取当当网、京东网、1号店的图书数据,并根据价格由低到高排序。若ISBN号为首次搜索还将存储到数据库中,非首次直接调用数据库内容。

项目说明

开发工具:Pycharm、VScode、Chrome、PHPMyAdmin、MySQL、BT面板
Python库(包):MySQLdb、requests、lxml、fake_useragent

数据库:

表格为爬虫程序执行时自动生成

项目:

mysql——
data_from_mysql:获取数据库表
data_to_mysql:执行爬虫并生成数据库表
mysql:数据库连接测试

spider——
spider_book:爬虫入口
spider_dangdang:当当网爬虫
spider_jd:京东网爬虫
spider_yhd:一号店爬虫
spider_taobao:淘宝爬虫

static——
images:图片文件

templates——
index:首页静态页面
search:搜索结果静态页面

application:系统入口文件


项目结构

data_from_mysql

import MySQLdb
def main(ISBN):
    try:
        conn= MySQLdb.connect(
                host='***',
                port = 3306,
                user='study',
                passwd='***',
                db ='***',
                charset='utf8'
                )
    except MySQLdb.Error as e:
        print('Error:%s' % e)
    # 使用cursor()方法获取操作游标
    cursor = conn.cursor()

    ISBN = 'ISBN' + str(ISBN)
    # SQL查询语句
    sql = "SELECT * FROM "+ ISBN +" WHERE 1"

    # 设置一个存储数据的数组
    book_list = []
    try:
        # 执行SQL语句
        cursor.execute(sql)
        # 获取所有记录列表
        results = cursor.fetchall()
        for row in results:
            book_list.append({
                'id': row[0],
                'title': row[1],
                'price': row[2],
                'link': row[3],
                'store': row[4],
                'origin': row[5],
            })
            # 打印结果

        print(book_list)
    except:
        print("Error: unable to fecth data")
    #关闭数据库连接
    conn.close()
    return book_list
if __name__ == '__main__':
    ISBN = input('请输入ISBN:')
    main(ISBN)
    #执行数据库自定义函数

data_to_mysql

from spider.spider_dangdang import spider as dangdang
from spider.spider_jd import  spider as jd
from spider.spider_yhd import spider as yhd
import MySQLdb


#9787544285148
def data_to_mysql(ISBN):
    """图书比价工具"""
    book_list = []
    #当当网
    dangdang(ISBN,book_list)
    print('当当网数据爬取完成')
    #1号店
    yhd(ISBN, book_list)
    print('1号店数据爬取完成')
    #京东网
    jd(ISBN, book_list)
    print('京东网数据爬取完成')
    # 开始排序
    book_list = sorted(book_list, key=lambda item: float(item["price"]))
    # for book in book_list:
    #     print(book)


    try:
        conn = MySQLdb.connect(
            host='***',
            port=3306,
            user='***',
            passwd='***',
            db='***',
            charset='utf8'
        )
    except MySQLdb.Error as e:
        print('Error:%s' % e)
    # 使用cursor()方法获取操作游标
    cursor = conn.cursor()

    # 如果数据表已经存在使用 execute() 方法删除表。
    ISBN = 'ISBN' + str(ISBN)
    cursor.execute("DROP TABLE IF EXISTS " + ISBN)
    # 创建数据表SQL语句
    sql = """CREATE TABLE """ + ISBN + """ (
            `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
            `title` VARCHAR(100) NOT NULL,
            `price` VARCHAR(200) NOT NULL,
            `link` VARCHAR(200) NOT NULL,
            `store` VARCHAR(100) NOT NULL,
            `origin` VARCHAR(100) NOT NULL )"""
    cursor.execute(sql)
    print(ISBN + '数据库创建成功!')
    print(book_list)

    for book in book_list:
        sql_inset = "INSERT INTO {ISBN} (`title`,`price`,`link`,`store`,`origin`)" \
                    " VALUE('{title}','{price}','{link}','{store}','{origin}');" \
            .format(ISBN=ISBN, title=book['title'], price=str(book['price']), link=book['link'], store=book['store'],
                    origin=book['origin'])
        try:
            # 执行SQL语句
            cursor.execute(sql_inset)
            # 如成功执行,则进行保存数据库
            conn.commit()
        except:
            conn.rollback()  # 回滚,如果出现错误则不进行修改

    # 关闭数据库连接
    conn.close()
    return book_list
    print('--------------')
if __name__ == '__main__':
     ISBN = input('请输入ISBN:')
    # book_list = data_to_mysql(ISBN)
    # #执行数据库自定义函数
    # conn = conn(ISBN,book_list)

spider_book

from spider.spider_dangdang import spider as dangdang
from spider.spider_jd import  spider as jd
from spider.spider_yhd import spider as yhd

def main(ISBN):
    """图书比价工具"""
    book_list = []
    #当当网
    dangdang(ISBN,book_list)
    print('当当网数据爬取完成')
    #1号店
    yhd(ISBN, book_list)
    print('1号店数据爬取完成')
    #京东网
    jd(ISBN, book_list)
    print('京东网数据爬取完成')
    # 开始排序
    # number = 123456
    book_list = sorted(book_list, key=lambda item: float(item["price"]))
    # for book in book_list:
    #    print(book)

    return book_list
    print('--------------')

if __name__ == '__main__':
    ISBN = input('请输入ISBN:')
    main(ISBN)
    book_list = main(ISBN)

spider_dangdang

import requests
from lxml import html
from fake_useragent import UserAgent
ua = UserAgent()
a = ua.random
headers = {"User-Agent": a}

def spider(ISBN,book_list = []):
    """爬取当当网数据"""
    url = 'http://search.dangdang.com/?key={ISBN}&act=input'.format(ISBN = ISBN)

    """获取HTML内容"""
    html_data = requests.get(url,headers=headers).text

    #Xpath对象
    selector = html.fromstring(html_data)

    ul_list = selector.xpath('//div[@id="search_nature_rg"]/ul/li')
    #print(ul_list[0])
    for li in ul_list:
        #标题
        title = li.xpath('a/@title')
        print(title[0])
        #链接
        link = li.xpath('a/@href')
        print(link[0])
        #价格
        price = li.xpath('p[@class="price"]/span[@class="search_now_price"]/text()')
        #备用价格,当为当当自营时,无法获取price,原因是此时多出一个div标签
        if len(price)==0:
            price_res = li.xpath('div[@class="ebook_buy"]/p[@class="price e_price"]/span[@class="search_now_price"]/text()')
            price = price_res
        if len(price)==0:
            price_res = li.xpath('div[@class="ebook_buy"]/p[@class="price orig_ebook_paytype e_price"]/span[@class="search_now_price"]/text()')
            price = price_res
        #若查询到当当电子书价格,可能会出现汉字,在这里把他的   铃铛/集  去掉
        price[0] = price[0].replace('¥', '')
        price[0] = price[0].replace('铃铛/集', '')

        print(price[0])
        #商家
        store = li.xpath('p[@class="search_shangjia"]/a/text()')
        #当商家为当当自营时无法取得店铺数据,因此做下面的判断
        if len(store)==0:
            store.append('当当自营')
        print(store[0])
        print("---------")

        book_list.append({
            'title': title[0],
            'price': price[0],
            "link": link[0],
            'store': store[0],
            'origin':'当当'
        })
        print(book_list)
#spider(9787555285120)

spider_jd

import requests
from lxml import html
from fake_useragent import UserAgent
ua = UserAgent()
a = ua.random
headers = {"User-Agent": a}

def spider(ISBN,book_list = []):
    """爬取当当网数据"""
    url = 'http://search.dangdang.com/?key={ISBN}&act=input'.format(ISBN = ISBN)

    """获取HTML内容"""
    html_data = requests.get(url,headers=headers).text

    #Xpath对象
    selector = html.fromstring(html_data)

    ul_list = selector.xpath('//div[@id="search_nature_rg"]/ul/li')
    #print(ul_list[0])
    for li in ul_list:
        #标题
        title = li.xpath('a/@title')
        print(title[0])
        #链接
        link = li.xpath('a/@href')
        print(link[0])
        #价格
        price = li.xpath('p[@class="price"]/span[@class="search_now_price"]/text()')
        #备用价格,当为当当自营时,无法获取price,原因是此时多出一个div标签
        if len(price)==0:
            price_res = li.xpath('div[@class="ebook_buy"]/p[@class="price e_price"]/span[@class="search_now_price"]/text()')
            price = price_res
        if len(price)==0:
            price_res = li.xpath('div[@class="ebook_buy"]/p[@class="price orig_ebook_paytype e_price"]/span[@class="search_now_price"]/text()')
            price = price_res
        #若查询到当当电子书价格,可能会出现汉字,在这里把他的   铃铛/集  去掉
        price[0] = price[0].replace('¥', '')
        price[0] = price[0].replace('铃铛/集', '')

        print(price[0])
        #商家
        store = li.xpath('p[@class="search_shangjia"]/a/text()')
        #当商家为当当自营时无法取得店铺数据,因此做下面的判断
        if len(store)==0:
            store.append('当当自营')
        print(store[0])
        print("---------")

        book_list.append({
            'title': title[0],
            'price': price[0],
            "link": link[0],
            'store': store[0],
            'origin':'当当'
        })
        print(book_list)
#spider(9787555285120)

spider_yhd

import requests
from lxml import html
from fake_useragent import UserAgent
ua = UserAgent()
a = ua.random
headers = {"User-Agent": a}

def spider(IBSN,book_list = []):
    url = 'https://search.yhd.com/c0-0/k{IBSN}/'.format(IBSN=IBSN)
    #获取HTML对象
    requ = requests.get(url,headers=headers).text
    #获取Xpath对象
    selector = html.fromstring(requ)
    #获取列表集合
    ul_list = selector.xpath('//div[@id="itemSearchList"]/div')
    for li in ul_list:
        #爬取标题时,发现获得两个元素的数组,其中后一个元素为商铺名称
        title = li.xpath('div/p["@proName clearfix"]/a/@title')
        print(title[0])
        link = li.xpath('div/p["@proName clearfix"]/a/@href')
        link[0] = 'http:' + link[0]
        print(link[0])
        price = li.xpath('div/p["@proPrice"]/em/@yhdprice')
        print(price[0])
        store = li.xpath('div/p["@proName clearfix"]/a/@title')
        print(store[1])
        print('----------')

        book_list.append({
            'title': title[0],
            'price': price[0],
            "link": link[0],
            'store': store[1],
            'origin':'1号店'
        })

#spider(9787545552607)

index.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>图书比价系统 | 毕业论文演示</title>
		<style type="text/css">
			*{margin: 0;padding: 0;}
			b{font-weight: normal;}
			li{list-style: none;}
			.top{
				width: 100%;
				height: 40px;
				background-color:#e8e8ee;
			}
			.statement{
				width: 1000px;
				height: 40px;
				margin: 0 auto
				;
			}
			.statement p{
				line-height: 40px;
				color: black;
				float: left;
				margin-left: 20px;
			}
			.statement b{
				line-height: 40px;
				color: black;
				float: right;
				margin-right: 20px;
			}
			.bottom{
				width: 100%;
				background-color: #e8e8ee;
				height: 40px;
				text-align: center;
				line-height: 40px;
				color: black;
			}
            .center{
                width: 1000px;
                margin: 50px auto;

                text-align: center;
            }
            .center img{
                width: 300px;
                margin-bottom: 50px;
            }
            .center input{
                width: 600px;
                height: 50px;
                padding: 0 25px;
                font-size: 24px;
                outline: none;
                color: darkgrey;

                border: 2px solid gainsboro;
                border-right: none;
                float: left;
            }
            .center .button{
                width: 100px;
                height: 54px;
                float: left;
                background-color: gainsboro;
                color: white;
                border: 2px solid gainsboro;
                border-left: none;
            }
            .center .button:hover{
                background-color: #444444;
            }
            .form{
                padding-left: 150px;
            }
            .form::after{
                content: '';
                display: block;
                visibility: hidden;
                height: 0;
                clear: both;
            }
            .description{
                width: 1000px;
                margin: 30px auto;
                border: 1px solid gray;
                padding: 20px;
            }
            h2{
                line-height: 60px;
                font-weight: normal;
            }
            h3{
                line-height: 35px;
                font-weight: normal;
            }
            p{
                line-height: 30px;
                color: grey;
                text-indent: 2em;
            }
		</style>
	</head>
	<body>
		<div class="top" id="top">
			<div class="statement"><b>作者:刘印</b><p>毕业设计演示系统 | 图书比价工具的设计与实现</p></div>
		</div>
        <div class="center">
            <img src="{{ url_for('static', filename= './images/logo.png',_t=val1) }}" alt="logo"><br>
            <div class="form">
                <form action="/template" method="POST">
                <input type="text" placeholder="请输入ISBN进行图书检索..." id="isbn" name="isbn">
                <input type="submit" value="搜书" class="button">
                </form>
            </div>

        </div>
        <div class="description">
            <h2>使用教程</h3>
            <p>本图书搜索比价系统仅支持对ISBN编码进行检索。您可以通过在上方输入ISBN编号进行搜索,搜索结果将按照价格由低到高的顺序进行排列。目前本系统支持搜索当当网、京东网、1号店等,若您对结果不满意,请联系我进行反馈,谢谢合作。</p>
        </div>
        <div class="description">
            <h2>ISBN简介</h2>
            <p>
                国际标准书号(International Standard Book Number),简称ISBN,是专门为识别图书等文献而设计的国际编号。ISO于1972年颁布了ISBN国际标准,并在西柏林普鲁士图书馆设立了实施该标准的管理机构——国际ISBN中心。现在,采用ISBN编码系统的出版物有:图书、小册子、缩微出版物、盲文印刷品等。2007年1月1日前,ISBN由10位数字组成,分四个部分:组号(国家、地区、语言的代号),出版者号,书序号和检验码。2007年1月1日起,实行新版ISBN,新版ISBN由13位数字组成,分为5段,即在原来的10位数字前加上3位EAN(欧洲商品编号)图书产品代码“978”。在联机书目中ISBN可以作为一个检索字段,从而为用户增加了一种检索途径。
            </p>
            <h2>新版ISBN</h2>
            <p>国际标准书号号码由13位数字组成,并以五个连接号或四个空格加以分割,每组数字都有固定的含义。</p>
            <h2>13位书号</h2>
            <p>EAN:European Article Number(欧洲商品号),国际标准书号中心于2004年决定在国际标准书号的基础上再添加一组三位数字在最前,即将现有的10位书号前面加上前缀号“978”或“979”及重新计算稽核号,以转换为新的13位格式,与13位欧洲商品编码相同。该计划于2007年1月1日实施。</p>
                <p>新13位国际标准书号-香港公共图书馆书刊注册组</p>
                <p>第一组:978或979;</p>
                <p>第二组:国家、语言或区位代码;</p>
                <p>第三组:出版社代码;</p>
                <p> 由各国家或地区的国际标准书号分配中心,分给各个出版社。</p>
                    <p>第四组:书序码;</p>
                        <p>该出版物代码,由出版社具体给出。</p>
                            <p>第五组:校验码;</p>
                                <p>只有一位,从0到9。</p>
            <h2>中国标准</h2>
            <p>1982年中国参加ISBN系统,并成立中国ISBN中心(设在国家新闻出版署)。中国标准书号(China Standard Book Number)自1987年1月1日起实施,至1988年1月1日完全取代原用的统一书号。</p>
            <p>中国标准书号共分两部分,第一部分为ISBN,是主体部分;第二部分为《中国图书馆图书分类法》基本大类类号和种次号。类号除工业技术诸类图书用两个字母外,其他各学科门类图书均用一个字母。种次号是同一出版社出版同一学科门类图书的顺序号,由出版社自行编定。类号与种次号之间用中圆点(·)隔开。第一部分和第二部分分两行排列,也可用斜线隔开,排成一行。例如ISBN 7-144-00316-X/TP·340。</p>
            <h2>功能作用</h2>
            <p>出版单位、发行单位及图书馆均可通过中国标准书号实现数据检索和信息查询,快速识别出版物的不同版本及不同产品形式,准确定位每一出版物。</p>
            <p>中国标准书号的使用,对出版业而言,除有助于图书出版、发行、经销、统计与库存控制等管理外,更便于出版物的国际交流;对图书馆等数据单位而言,可简化采购、征集、编目、流通、馆际互借等工作。</p>
        </div>
		<div class="bottom">
			<p>图书比价工具的设计与实现&copy;河南大学 | 软件学院 | 刘印</p>
        </div>
    <script type="text/javascript">
		var input = document.querySelectorAll("input");
		var inputValue = input[0];
		var inputSub = input[1];
		inputSub.addEventListener("click",judge);
		function judge(e){
			if(!judgeInputValue()){
				 e.preventDefault();
			}
		}
		function judgeInputValue(){
			var isbnValue = inputValue.value;
			if(isNaN(isbnValue.toString())){
				alert("目前仅支持通过ISBN号进行查询!");
				return false;
			}else if(isbnValue.length === 11){
				alert("目前仅支持13位的ISBN号查询!");
				return false;
			}else if(isbnValue.length === 13){
				return true;
			}else{
				alert("你输入的ISBN号不正确!");
			}
		}
	</script>
	</body>
</html>

search.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>图书比价系统 | 毕业论文演示</title>
		<style type="text/css">
			*{margin: 0;padding: 0;font-family: '仿宋';}
			b{font-weight: normal;}
			li{list-style: none;}
			.top{
				width: 100%;
				height: 40px;
				background-color:#333333;
			}
			.statement{
				width: 1000px;
				height: 40px;
				margin: 0 auto
				;
			}
			.statement p{
				line-height: 40px;
				color: #e8e8ee;
				float: left;
				margin-left: 20px;
			}
			.statement b{
				line-height: 40px;
				color: seashell;
				float: right;
				margin-right: 20px;
			}
			.main{
				width: 100%;
				background-color: white;
				height: 120px;
				border-bottom: 1px solid grey;
			}
			.main div{
				width: 1000px;
				margin: 0 auto;
				background-color: white;
			}
			.main .logo{
				float: left;
				width: 400px;
				height: 120px;
			}
			.main .logo img{
				height: 80px;
				margin-top: 20px;
			}
			.main .search{
				float: right;
				width: 600px;
				height: 120px;
			}
			.main .search p{
				background-color: #f9513b;
				height: 18px;
				padding: 6px 6px;
				color: white;
				font-size: 16px;
				width: 220px;
				margin-top: 20px;
			}
			.main .search input:first-of-type{
				outline: none;
				width: 500px;
				height: 36px;
				border: 3px solid #f9513b;
				line-height: 36px;
				font-size: 16px;
				padding-left: 16px;
				float: left;
			}
			.main .search input:last-of-type{
				outline: none;
				border: none;
				width: 78px;
				font-size: 18px;
				height: 42px;
				background-color: #f9513b;
				color: white;
				float: left;
			}
			.center{
				width: 100%;
				background-color: #eeeeee;
				min-height: 800px;
				padding-top: 30px;
			}
			.center .title{
				width: 1000px;
				margin: 0px auto;
				background-color: tomato;
				color: white;
				font-weight: 700;
				border-radius: 50px;
			}
			.center .title::after{
				content: '.';
				height: 0;
				display: block;
				visibility: hidden;
				clear: both;
			}
			.center .title p{
				float: left;
				height: 30px;
				line-height: 30px;
				width: 200px;
				text-align: center;
				padding: 25px 0;
			}
			.center .origin{
				width: 600px;
				margin: 0px auto 0px auto;
				background-color: tomato;
				color:white;
				height: 50px;
				border-radius: 50px 50px 0px 0px;
				text-align: center;
				border-bottom: 1px solid white;
			}
			.center .origin p{
				line-height: 50px;

			}
			.center .book{
				width: 1000px;
				background-color: #eeeeee;
				margin: 0px auto;
			}
			.book ul::after{
				content: '.';
				height: 0;
				display: block;
				visibility: hidden;
				clear: both;
			}
			.center ul{
				border-radius: 50px;
				background-color: white;
				margin-top: 20px;
			}
			.center ul li{
				height: 100px;
				float: left;
				width: 190px;
				border-left: 1px dotted #eee;
				line-height: 100px;
				text-align: center;
			}
			.center ul li:first-of-type{
				height: 80px;
				color: grey;
				font-size: 14px;
				line-height: 16px;
				margin-top: 20px;
				margin-left: 40px;
				text-align: left;
				overflow: hidden;
				border-left: none;
			}
			.center ul li:nth-of-type(2){
				color:red;
				font-weight: 700;
				font-size: 24px;
			}
			.center ul li:nth-of-type(3){
				color:silver;
				font-weight: 700;
				font-size: 20px;
				font-family: '隶书;
			}
			.center ul li:nth-of-type(4){
				color:tomato;
				font-weight: 700;
				font-size: 20px;
				font-family: Arial, Helvetica, sans-serif;
			}
			.center ul li input{
				height: 40px;
				width: 100px;
				color: white;
				background-color: tomato;
				outline: none;
				border: none;
				border-radius: 20px;
			}
			.bottom{
				width: 100%;
				background-color: #333333;
				height: 40px;
				text-align: center;
				line-height: 40px;
				color: white;
				margin-top: 5px;
			}

			.gototop,#getMoreBook{
				width: 800px;
				height: 20px;
				line-height: 25px;
				color: white;
				background-color: tomato;
				margin: 0px auto;
				padding: 10px;
				top: 30;
				right: 5;
				text-align: center;
				z-index: 1;
				border-radius: 15px;
				margin-top: 20px;
			}
			.gototop a,#getMoreBook a{
				color: white;
				text-decoration: none;
			}
		</style>
	</head>
	<body>
		<div class="top">
			<div class="statement"><b>作者:刘印</b><p>毕业设计演示系统 | 图书比价工具的设计与实现</p></div>
		</div>
		<div class="main">
			<div>
				<div class="logo">
					<a href="http://127.0.0.1:5000/template"><img src="{{ url_for('static', filename= './images/logo.png',_t=val1) }}" alt="logo"></a>

				</div>
				<div class="search">
					<p>请在下面输入ISBN号进行搜索</p>
					<form action="/template" method="POST">
						<input type="text" placeholder="请输入ISBN号..." id="isbn" name="isbn">
						<input type="submit" value="搜索">
					</form>
				</div>
			</div>
		</div>
		<div class="center">
			<div class="origin">
				<p>以下数据来自{{dataOrign}}!共检索到{{book_number}}条数据!</p>
			</div>
			<div class="title">
				<p>图书名称</p>
				<p>售卖价格</p>
				<p>店铺名称</p>
				<p>数据来源</p>
				<p>售卖地址</p>
			</div>
			<div class="book">
				{% for n in book_list%}
				<ul>
					<li><p>{{n.title}}</p></li>

					<li>{{n.price}}¥</li>
					<li>{{n.store}}</li>
					<li>{{n.origin}}</li>
					<li><a href="{{n.link}}" target="_blank"><input type="button" value="点我去买书"></a></li>
				</ul>
				{% endfor %}
			</div>
			<div id="getMoreBook"><a>没有找到想要的数据 | 点我加载更多</a></div>
			<div class="gototop"><a href="#top">数据加载完毕 | 点我返回顶部</a></div>
		</div>
		<div class="bottom">
			<p>图书比价工具的设计与实现&copy;河南大学 | 软件学院 | 刘印</p>
		</div>
	</body>
	<script type="text/javascript">
		var input = document.querySelectorAll("input");
		var inputValue = input[0];
		var inputSub = input[1];
		inputSub.addEventListener("click",judge);
		function judge(e){
			if(!judgeInputValue()){
				 e.preventDefault();
			}
		}
		function judgeInputValue(){
			var isbnValue = inputValue.value;
			if(isNaN(isbnValue.toString())){
				alert("目前仅支持通过ISBN号进行查询!");
				return false;
			}else if(isbnValue.length === 11){
				alert("目前仅支持13位的ISBN号查询!");
				return false;
			}else if(isbnValue.length === 13){
				return true;
			}else{
				alert("你输入的ISBN号不正确!");
			}
		}
	</script>
		<script>
		var bookList = document.querySelectorAll(".book>ul");
		var bookListLen = bookList.length;
		var getMoreBook = document.getElementById("getMoreBook");
		var showListLen = 0;
		var bookListArr = Array.from(bookList);
		// console.log(getMoreBook.firstElementChild.textContent);
		initList();
		function initList(){
			bookListArr.forEach(function (item,index){
				if(index>9) item.style.setProperty('display','none');
				if(index<=9) showListLen+=1;
			})
			if(bookListLen <= showListLen){
				getMoreBook.firstElementChild.textContent = "数据加载完毕 | 请不要点击我";
			}else{
				getMoreBook.addEventListener("click",getMoreHandler);
			}
		}
		function getMoreHandler(e){
			if(bookListLen-showListLen<10){
				while(showListLen<=bookListLen){
					bookList[showListLen-1].style.setProperty("display","block");
					showListLen+=1;
					console.log(showListLen)
				}
				getMoreBook.firstElementChild.textContent = "数据加载完毕 | 请不要点击我";
			}else{
				for(var i =0;i<10;i++){
					bookList[showListLen-1].style.setProperty("display","block");
					showListLen+=1;
					console.log(showListLen)
				}
			}
		}
		ISBN = {{ISBN}}
		if(ISBN){
			var input = document.getElementById('isbn');
			input.value = ISBN
		}
	</script>
</html>

application

from flask import request, Flask, make_response, jsonify, render_template
from mysql.data_from_mysql import main as dataFromMysql
from mysql.data_to_mysql import data_to_mysql as dataToMySQL
# import sys
# sys.path.append('..\\mysql\\')
# 导入Flask类
# from flask import Flask
# book_list = main(9787544285148)
# print(book_list)
# 实例化,可视为固定格式
app = Flask(__name__)
@app.route('/templat')
def hello_world():
    return render_template("index.html")
# @app.route('/template',methods = ["GET","POST"])
# def template():
#     if request.method == "POST":
#         isbn = request.form.get("search")
#     else:
#         isbn = request.args.get("search")
#         print(isbn)
#     # return "request:%s,params:%s,var_a:%s"%(request.args)
@app.route("/text")
def text():
    response = make_response("text/html", 200)
    return response
# @app.route("/json")
# def json():
#     data = {"a": "b"}
#     response = make_response(jsonify(data))
#     return response
@app.route("/template", methods=["GET", "POST"])
def template():
    book_list = []
    dataOrign = "查询失败"
    if request.method== 'POST':
        # context = {"name":name}
        ISBN= request.form['isbn']
        mysqlData = dataFromMysql(ISBN)
        if(mysqlData!=[]):
            book_list = mysqlData
            dataOrign = "MySQL数据库"
            #print(book_list)
        else:
            book_list = dataToMySQL(ISBN)
            dataOrign = "爬虫程序"
        book_number = len(book_list)
        return render_template("search.html", book_list=book_list,book_number = book_number,dataOrign=dataOrign,ISBN=ISBN)
    return render_template("index.html")
if __name__ == '__main__':
    # app.run(host, port, debug, options)
    # 默认值:host=127.0.0.1, port=5000, debug=false
    app.run(host='127.0.0.1', port=5000, debug=True)
赞(2) 打赏
未经允许不得转载:散人研 » 爬虫实战 | 完整项目代码
分享到: 更多 (0)

评论 抢沙发

6 + 8 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏