当在Iphone Safari中使用sort的排序函数失败

其实本来只是打算颠倒数组中元素的顺序的,当时用了sort。虽然本来就不是最佳解决方案,但是还是用了,并且华丽丽的在iphone中没干活。

查了半天说Safari不支持排序函数,本来用reverse替换掉sort也就罢了,你看我这小暴脾气,非要搞一搞。

代码虽说是网上找的,其实思路给我的差不多的,就是重写sort自己排序一下,不过网上顺便看到了IE9里也很挫,感觉稍微平衡了一点。

上代码:

;(function(w){
    if(/msie|applewebkit.+safari/i.test(w.navigator.userAgent)){
        var _sort = Array.prototype.sort;
        Array.prototype.sort = function(fn){
            if(!!fn && typeof fn === 'function'){
                if(this.length < 2) return this;
                var i = 0, j = i + 1, l = this.length, tmp, r = false, t = 0;
                for(; i < l; i++){
                    for(j = i + 1; j < l; j++){
                        t = fn.call(this, this[i], this[j]);
                        r = (typeof t === 'number' ? t : !!t ? 1 : 0) > 0 ? true : false;
                        if(r){
                            tmp = this[i];
                            this[i] = this[j];
                            this[j] = tmp;
                        }
                    }
                }
                return this;
            } else {
                return _sort.call(this);
            }
        };
    }
})(window);

都快被坑习惯了呢/(ㄒoㄒ)/~~

解释代码,说明爬虫实现过程:# -- coding:utf8 -- import pymysql import requests import re import pandas as pd from bs4 import BeautifulSoup def get_movies(start): url = "https://movie.douban.com/top250?start=%d&filter=" % start lists = [] headers = { "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"} html = requests.get(url,headers=headers) soup = BeautifulSoup(html.content, "html.parser") items = soup.find("ol", class_="grid_view").find_all("li") for i in items: movie = {} movie["rank"] = i.find("em").text movie["link"] = i.find("div","pic").find("a").get("href") movie["mdirecter"]=re.findall(re.compile(r'<p class="">(.*?)</p>',re.S),str(i))[0].replace("...<br/>","").replace("\n ","") movie["name"] = i.find("span", "title").text movie["score"] = i.find("span", "rating_num").text movie["quote"] = i.find("span", "inq").text if(i.find("span", "inq")) else "" lists.append(movie) return lists if name == "main": db = pymysql.connect(host="localhost",user="root",password="123456",db="maoyan",charset="utf8",port = 3306) cursor = db.cursor() cursor.execute("DROP TABLE IF EXISTS movies") createTab = """CREATE TABLE movies( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, link VARCHAR(50) NOT NULL, score VARCHAR(4) NOT NULL, descr VARCHAR(50), directer VARCHAR(100), timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP )""" cursor.execute(createTab) #采集到的数据循环插入数据 start = 0 while (start < 250): lists = get_movies(start) for i in lists: sql = "INSERT INTO movies(name,link,score,descr,directer) VALUES(%s,%s,%s,%s,%s)" try: cursor.execute(sql, (i["name"], i["link"] , i["score"], i["quote"],i["mdirecter"])) db.commit() print(i["name"]+"...成功插入到数据库") except: db.rollback() start += 25 db.close() cursor = db.cursor() conn = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='maoyan', charset='utf8mb4') cursor = conn.cursor() #输出评分top10 sql = "select * from movies limit 10" db = pd.read_sql(sql, conn) df = db.sort_values(by="score", ascending=False) print(df[['name', 'score']])
最新发布
06-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值