美文网首页
day68-爬取ajax内容

day68-爬取ajax内容

作者: barriers | 来源:发表于2019-02-20 19:47 被阅读0次

    1建数据库语句

    create database mogujie default character set='utf8';
    use mogujie;
    create table goods (
    id int primary key auto_increment,
    trade_itemid varchar(32),
    img varchar(1024),
    link varchar(1024),
    title varchar(1024),
    org_price varchar(32),
    price varchar(32)
    );
    

    2数据库操作函数

    import pymysql        
    # 获取数据库连接
    def get_connection():
        host = '127.0.0.1'
        port = 3306
        user = 'root'
        password = '123456'
        database = 'mogujie'
        db = pymysql.connect(host, user, password, database, charset='utf8', port=port)
        return db        
    # 获取数据库游标
    def get_cursor(db):
        cursor = db.cursor()
        return cursor        
    # 关闭链接
    def close_connection(db):
        db.colos()           
    # 插入一条记录(可以被注入sql语句)
    def insert_mogujie_record_sql(db, cursor, item):
        sql = 'insert into goods (trade_itemid, img, link, title, org_price, price) values("%s","%s","%s","%s","%s","%s")'%(item['tradeItemId'], item['img'], item['link'], item['title'], item['orgPrice'], item['price'])
        print(sql)
        cursor.execute(sql)
        # 需要上传,数据才能存入数据库
        db.commit()        
    # 插入一条记录(不能被注入sql语句,建议采用)
    def insert_mogujie_record(db, cursor, item):
        sql = 'insert into goods (trade_itemid, img, link, title, org_price, price) values(%s,%s,%s,%s,%s,%s)'
        cursor.execute(sql, (item['tradeItemId'], item['img'], item['link'], item['title'], item['orgPrice'], item['price']))
        print(sql)
        # 需要上传,数据才能存入数据库
        db.commit()
    

    sql = 'insert into goods (trade_itemid, img, link, title, org_price, price) values("%s","%s","%s","%s","%s","%s")'%(item['tradeItemId'], item['img'], item['link'], item['title'], item['orgPrice'], item['price'])
    cursor.execute(sql)通过这种方式可以插入数据;但也可以被提交数据的人注入sql语句对数据库进行操作。插入形如a1");delete from movie;" 这种格式的语句。例如:
    insert into movie ( title, actor) values ("a1");delete from movie;"", "ab", "dd")
    故一般用下面语句:
    sql = 'insert into goods (trade_itemid, img, link, title, org_price, price) values(%s,%s,%s,%s,%s,%s)'
    cursor.execute(sql, (item['tradeItemId'], item['img'], item['link'], item['title'], item['orgPrice'], item['price']))通过将数据作为参数的形式插入而不是拼接字符串。
    在上面注入sql的语句中可以通过对其使用:阻止分号转义或者删除分号两种方法可以使注入的sql语句失效。

    3爬取ajx渲染的网页并存入数据库

    import json
    import re
    from mogujie_db_helper import *
    import requests    
    db = get_connection()
    cursor = get_cursor(db)        
    # 获取单个网页
    def get_page():
        # 网址
        url = 'https://list.mogujie.com/search?callback=jQuery21106839242500718683_1550628335676&_version=8193&ratio=3%3A4&cKey=15&page=2&sort=pop&ad=0&fcid=50020&action=trousers&acm=3.mce.1_10_1ks9s.128038.0.lNFGTrizXmwD3.pos_2-m_484852-sd_119&ptp=1.n5T00.0.0.OyhOtYtw&_=1550628335678'
        # 伪装请求头
        headers = {
            "User-Agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
            # 'Referer': "https://www.mogujie.com/",
            # "Host": "api.mogujie.com"
        }    
        # 请求网页并返回响应
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.content.decode('utf-8')
        return None        
    # 解析网页
    def parse_page(html):
        pattern = re.compile('.*?\((.*?)\).*?;', re.S)
        result = re.findall(pattern, html)[0]
        # json格式转python格式
        result_dict = json.loads(result)
        result_list = result_dict['result']['wall']['docs']
        for item in result_list:
            print(item['title'])
            insert_mogujie_record(db, cursor, item)
        return result_dict        
    def main():
        html = get_page()
        parse_page(html) 
    if __name__ == '__main__':
        main()
    

    4Mysql环境变量配置

    windows下配置环境变量
    1.高级环境变量配置页面:系统变量 - path - 编辑 - 添加 - 将复制的路径粘贴,确定
    2.echo %path% cmd中查看环境变量
    linux和mac中配置环境变量
    cd 进入用户目录
    ls -la
    vim .bash_profile
    将路径粘贴到里面
    source .bash_profile

    5cmd中运行mysql

    以下语句都是在cmd窗口中运行

    5.1方法一

    mysql -uroot -p cmd中链接数据库
    登陆后:执行. D:\pythonwork\spider\day02\maoyan.sql 运行sql语句
    show databses;
    show tables;
    show maoyan;

    5.2方法二

    登陆前:mysql -uroot -p123456 <D:\pythonwork\spider\day03\mogujie.sql 运行sql语句
    经过上面语句后,已经执行了sql语句建好了数据库及表格
    mysql -uroot -p 登陆mysql
    登陆mysql后
    删除数据库:drop database mogujie ;
    查看所有数据库:show databases;
    切换到数据库:use mogujie;
    查看数据库下所有表格:show tables;
    查看goods表有多少条数据:select count(*) from goods;
    exit 退出当前登陆
    desc 表名; 查看表格

    5.3方法三

    在cmd中登陆mysql后,直接在cmd窗口中输入sql语句建库,切换数据库及建表也可以创建。

    相关文章

      网友评论

          本文标题:day68-爬取ajax内容

          本文链接:https://www.haomeiwen.com/subject/dihkyqtx.html