Python采集爬取京东商品信息和评论并存入MySQL


Posted in Python onApril 12, 2022

构建mysql数据表

问题:使用SQL alchemy时,非主键不能设置为自增长,但是我想让这个非主键仅仅是为了作为索引,autoincrement=True无效,该怎么实现让它自增长呢?

from sqlalchemy import String,Integer,Text,Column
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import scoped_session
from sqlalchemy.ext.declarative import declarative_base
 
engine=create_engine(
    "mysql+pymysql://root:root@127.0.0.1:3306/jdcrawl?charset=utf8",
    pool_size=200,
    max_overflow=300,
    echo=False
)
 
BASE=declarative_base() # 实例化
 
class Goods(BASE):
    __tablename__='goods'
    id=Column(Integer(),primary_key=True,autoincrement=True)
    sku_id = Column(String(200), primary_key=True, autoincrement=False)
    name=Column(String(200))
    price=Column(String(200))
    comments_num=Column(Integer)
    shop=Column(String(200))
    link=Column(String(200))
 
class Comments(BASE):
    __tablename__='comments'
    id=Column(Integer(),primary_key=True,autoincrement=True,nullable=False)
    sku_id=Column(String(200),primary_key=True,autoincrement=False)
    comments=Column(Text())
 
BASE.metadata.create_all(engine)
Session=sessionmaker(engine)
sess_db=scoped_session(Session)

第一版:

问题:爬取几页评论后就会爬取到空白页,添加refer后依旧如此

尝试解决方法:将获取评论地方的线程池改为单线程,并每获取一页评论增加延时1s

# 不能爬太快!!!不然获取不到评论
 
from bs4 import BeautifulSoup
import requests
from urllib import parse
import csv,json,re
import threadpool
import time
from jd_mysqldb import Goods,Comments,sess_db
 
headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    'Cookie': '__jdv=76161171|baidu|-|organic|%25E4%25BA%25AC%25E4%25B8%259C|1613711947911; __jdu=16137119479101182770449; areaId=7; ipLoc-djd=7-458-466-0; PCSYCityID=CN_410000_0_0; shshshfpa=07383463-032f-3f99-9d40-639cb57c6e28-1613711950; shshshfpb=u8S9UvxK66gfIbM1mUNrIOg%3D%3D; user-key=153f6b4d-0704-4e56-82b6-8646f3f0dad4; cn=0; shshshfp=9a88944b34cb0ff3631a0a95907b75eb; __jdc=122270672; 3AB9D23F7A4B3C9B=SEELVNXBPU7OAA3UX5JTKR5LQADM5YFJRKY23Z6HDBU4OT2NWYGX525CKFFVHTRDJ7Q5DJRMRZQIQJOW5GVBY43XVI; jwotest_product=99; __jda=122270672.16137119479101182770449.1613711948.1613738165.1613748918.4; JSESSIONID=C06EC8D2E9384D2628AE22B1A6F9F8FC.s1; shshshsID=ab2ca3143928b1b01f6c5b71a15fcebe_5_1613750374847; __jdb=122270672.5.16137119479101182770449|4.1613748918',
    'Referer': 'https://www.jd.com/'
}
 
num=0   # 商品数量
comments_num=0   # 评论数量
 
# 获取商品信息和SkuId
def getIndex(url):
    session=requests.Session()
    session.headers=headers
    global num
    res=session.get(url,headers=headers)
    print(res.status_code)
    res.encoding=res.apparent_encoding
    soup=BeautifulSoup(res.text,'lxml')
    items=soup.select('li.gl-item')
    for item in items[:3]:  # 爬取3个商品测试
        title=item.select_one('.p-name a em').text.strip().replace(' ','')
        price=item.select_one('.p-price strong').text.strip().replace('¥','')
        try:
            shop=item.select_one('.p-shopnum a').text.strip()   # 获取书籍时查找店铺的方法
        except:
            shop=item.select_one('.p-shop a').text.strip()  #   获取其他商品时查找店铺的方法
        link=parse.urljoin('https://',item.select_one('.p-img a').get('href'))
        SkuId=re.search('\d+',link).group()
        comments_num=getCommentsNum(SkuId,session)
        print(SkuId,title, price, shop, link, comments_num)
        print("开始存入数据库...")
        try:
            IntoGoods(SkuId,title, price, shop, link, comments_num)
        except Exception as e:
            print(e)
            sess_db.rollback()
        num += 1
        print("正在获取评论...")
        # 获取评论总页数
        url1 = f'https://club.jd.com/comment/productPageComments.action?productId={SkuId}&score=0&sortType=5&page=0&pageSize=10'
        headers['Referer'] = f'https://item.jd.com/{SkuId}.html'
        headers['Connection']='keep-alive'
        res2 = session.get(url1,headers=headers)
        res2.encoding = res2.apparent_encoding
        json_data = json.loads(res2.text)
        max_page = json_data['maxPage']  # 经测试最多可获取100页评论,每页10条
        args = []
        for i in range(0, max_page):
            # 使用此链接获取评论得到的为json格式
            url2 = f'https://club.jd.com/comment/productPageComments.action?productId={SkuId}&score=0&sortType=5&page={i}&pageSize=10'
            # 使用此链接获取评论得到的非json格式,需要提取
            # url2_2=f'https://club.jd.com/comment/productPageComments.action?callback=jQuery9287224&productId={SkuId}&score=0&sortType=5&page={i}&pageSize=10'
            args.append(([session,SkuId,url2], None))
        pool2 = threadpool.ThreadPool(2)   # 2个线程
        reque2 = threadpool.makeRequests(getComments,args)  # 创建任务
        for r in reque2:
            pool2.putRequest(r) # 提交任务到线程池
        pool2.wait()
 
# 获取评论总数量
def getCommentsNum(SkuId,sess):
    headers['Referer']=f'https://item.jd.com/{SkuId}.html'
    url=f'https://club.jd.com/comment/productCommentSummaries.action?referenceIds={SkuId}'
    res=sess.get(url,headers=headers)
    try:
        res.encoding=res.apparent_encoding
        json_data=json.loads(res.text)  # json格式转为字典
        num=json_data['CommentsCount'][0]['CommentCount']
        return num
    except:
        return 'Error'
 
# 获取评论
def getComments(sess,SkuId,url2):
    global comments_num
    print(url2)
    headers['Referer'] = f'https://item.jd.com/{SkuId}.html'
    res2 = sess.get(url2,headers=headers)
    res2.encoding='gbk'
    json_data=res2.text
    '''
    # 如果用url2_2需要进行如下操作提取json
    start = res2.text.find('jQuery9287224(') + len('jQuery9287224(')
    end = res2.text.find(');')
    json_data=res2.text[start:end]
    '''
    dict_data = json.loads(json_data)
    try:
        comments=dict_data['comments']
        for item in comments:
            comment=item['content'].replace('\n','')
            # print(comment)
            comments_num+=1
            try:
                IntoComments(SkuId,comment)
            except Exception as e:
                print(e)
                sess_db.rollback()
    except:
        pass
 
# 商品信息入库
def IntoGoods(SkuId,title, price, shop, link, comments_num):
    goods_data=Goods(
        sku_id=SkuId,
        name=title,
        price=price,
        comments_num=comments_num,
        shop=shop,
        link=link
    )
    sess_db.add(goods_data)
    sess_db.commit()
 
# 评论入库
def IntoComments(SkuId,comment):
    comments_data=Comments(
        sku_id=SkuId,
        comments=comment
    )
    sess_db.add(comments_data)
    sess_db.commit()
 
if __name__ == '__main__':
    start_time=time.time()
    urls=[]
    KEYWORD=parse.quote(input("请输入要查询的关键词:"))
    for i in range(1,2):    # 爬取一页进行测试
        url=f'https://search.jd.com/Search?keyword={KEYWORD}&wq={KEYWORD}&page={i}'
        urls.append(([url,],None))  # threadpool要求必须这样写
    pool=threadpool.ThreadPool(2)  # 2个线程的线程池
    reque=threadpool.makeRequests(getIndex,urls)    # 创建任务
    for r in reque:
        pool.putRequest(r)  # 向线程池提交任务
    pool.wait() # 等待所有任务执行完毕
    print("共获取{}件商品,获得{}条评论,耗时{}".format(num,comments_num,time.time()-start_time))

第二版 :

经测试,的确不会出现空白页的情况

进一步优化:同时获取2个以上商品的评论

# 不能爬太快!!!不然获取不到评论
from bs4 import BeautifulSoup
import requests
from urllib import parse
import csv,json,re
import threadpool
import time
from jd_mysqldb import Goods,Comments,sess_db
 
headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    'Cookie': '__jdv=76161171|baidu|-|organic|%25E4%25BA%25AC%25E4%25B8%259C|1613711947911; __jdu=16137119479101182770449; areaId=7; ipLoc-djd=7-458-466-0; PCSYCityID=CN_410000_0_0; shshshfpa=07383463-032f-3f99-9d40-639cb57c6e28-1613711950; shshshfpb=u8S9UvxK66gfIbM1mUNrIOg%3D%3D; user-key=153f6b4d-0704-4e56-82b6-8646f3f0dad4; cn=0; shshshfp=9a88944b34cb0ff3631a0a95907b75eb; __jdc=122270672; 3AB9D23F7A4B3C9B=SEELVNXBPU7OAA3UX5JTKR5LQADM5YFJRKY23Z6HDBU4OT2NWYGX525CKFFVHTRDJ7Q5DJRMRZQIQJOW5GVBY43XVI; jwotest_product=99; __jda=122270672.16137119479101182770449.1613711948.1613738165.1613748918.4; JSESSIONID=C06EC8D2E9384D2628AE22B1A6F9F8FC.s1; shshshsID=ab2ca3143928b1b01f6c5b71a15fcebe_5_1613750374847; __jdb=122270672.5.16137119479101182770449|4.1613748918',
    'Referer': 'https://www.jd.com/'
}
 
num=0   # 商品数量
comments_num=0   # 评论数量
 
# 获取商品信息和SkuId
def getIndex(url):
    session=requests.Session()
    session.headers=headers
    global num
    res=session.get(url,headers=headers)
    print(res.status_code)
    res.encoding=res.apparent_encoding
    soup=BeautifulSoup(res.text,'lxml')
    items=soup.select('li.gl-item')
    for item in items[:2]:  # 爬取2个商品测试
        title=item.select_one('.p-name a em').text.strip().replace(' ','')
        price=item.select_one('.p-price strong').text.strip().replace('¥','')
        try:
            shop=item.select_one('.p-shopnum a').text.strip()   # 获取书籍时查找店铺的方法
        except:
            shop=item.select_one('.p-shop a').text.strip()  #   获取其他商品时查找店铺的方法
        link=parse.urljoin('https://',item.select_one('.p-img a').get('href'))
        SkuId=re.search('\d+',link).group()
        headers['Referer'] = f'https://item.jd.com/{SkuId}.html'
        headers['Connection'] = 'keep-alive'
        comments_num=getCommentsNum(SkuId,session)
        print(SkuId,title, price, shop, link, comments_num)
        print("开始将商品存入数据库...")
        try:
            IntoGoods(SkuId,title, price, shop, link, comments_num)
        except Exception as e:
            print(e)
            sess_db.rollback()
        num += 1
        print("正在获取评论...")
        # 获取评论总页数
        url1 = f'https://club.jd.com/comment/productPageComments.action?productId={SkuId}&score=0&sortType=5&page=0&pageSize=10'
        res2 = session.get(url1,headers=headers)
        res2.encoding = res2.apparent_encoding
        json_data = json.loads(res2.text)
        max_page = json_data['maxPage']  # 经测试最多可获取100页评论,每页10条
        print("{}评论共{}页".format(SkuId,max_page))
        if max_page==0:
            IntoComments(SkuId,'0')
        else:
            for i in range(0, max_page):
                # 使用此链接获取评论得到的为json格式
                url2 = f'https://club.jd.com/comment/productPageComments.action?productId={SkuId}&score=0&sortType=5&page={i}&pageSize=10'
                # 使用此链接获取评论得到的非json格式,需要提取
                # url2_2=f'https://club.jd.com/comment/productPageComments.action?callback=jQuery9287224&productId={SkuId}&score=0&sortType=5&page={i}&pageSize=10'
                print("开始获取第{}页评论:{}".format(i+1,url2) )
                getComments(session,SkuId,url2)
                time.sleep(1)
 
# 获取评论总数量
def getCommentsNum(SkuId,sess):
    url=f'https://club.jd.com/comment/productCommentSummaries.action?referenceIds={SkuId}'
    res=sess.get(url)
    try:
        res.encoding=res.apparent_encoding
        json_data=json.loads(res.text)  # json格式转为字典
        num=json_data['CommentsCount'][0]['CommentCount']
        return num
    except:
        return 'Error'
 
# 获取评论
def getComments(sess,SkuId,url2):
    global comments_num
    res2 = sess.get(url2)
    res2.encoding=res2.apparent_encoding
    json_data=res2.text
    '''
    # 如果用url2_2需要进行如下操作提取json
    start = res2.text.find('jQuery9287224(') + len('jQuery9287224(')
    end = res2.text.find(');')
    json_data=res2.text[start:end]
    '''
    dict_data = json.loads(json_data)
    comments=dict_data['comments']
    for item in comments:
        comment=item['content'].replace('\n','')
        # print(comment)
        comments_num+=1
        try:
            IntoComments(SkuId,comment)
        except Exception as e:
            print(e)
            sess_db.rollback()
 
# 商品信息入库
def IntoGoods(SkuId,title, price, shop, link, comments_num):
    goods_data=Goods(
        sku_id=SkuId,
        name=title,
        price=price,
        comments_num=comments_num,
        shop=shop,
        link=link
    )
    sess_db.add(goods_data)
    sess_db.commit()
 
# 评论入库
def IntoComments(SkuId,comment):
    comments_data=Comments(
        sku_id=SkuId,
        comments=comment
    )
    sess_db.add(comments_data)
    sess_db.commit()
 
if __name__ == '__main__':
    start_time=time.time()
    urls=[]
    KEYWORD=parse.quote(input("请输入要查询的关键词:"))
    for i in range(1,2):    # 爬取一页进行测试
        url=f'https://search.jd.com/Search?keyword={KEYWORD}&wq={KEYWORD}&page={i}'
        urls.append(([url,],None))  # threadpool要求必须这样写
    pool=threadpool.ThreadPool(2)  # 2个线程的线程池
    reque=threadpool.makeRequests(getIndex,urls)    # 创建任务
    for r in reque:
        pool.putRequest(r)  # 向线程池提交任务
    pool.wait() # 等待所有任务执行完毕
    print("共获取{}件商品,获得{}条评论,耗时{}".format(num,comments_num,time.time()-start_time))

第三版:

 。。。。不行,又出现空白页了

# 不能爬太快!!!不然获取不到评论
from bs4 import BeautifulSoup
import requests
from urllib import parse
import csv,json,re
import threadpool
import time
from jd_mysqldb import Goods,Comments,sess_db
 
headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    'Cookie': '__jdv=76161171|baidu|-|organic|%25E4%25BA%25AC%25E4%25B8%259C|1613711947911; __jdu=16137119479101182770449; areaId=7; ipLoc-djd=7-458-466-0; PCSYCityID=CN_410000_0_0; shshshfpa=07383463-032f-3f99-9d40-639cb57c6e28-1613711950; shshshfpb=u8S9UvxK66gfIbM1mUNrIOg%3D%3D; user-key=153f6b4d-0704-4e56-82b6-8646f3f0dad4; cn=0; shshshfp=9a88944b34cb0ff3631a0a95907b75eb; __jdc=122270672; 3AB9D23F7A4B3C9B=SEELVNXBPU7OAA3UX5JTKR5LQADM5YFJRKY23Z6HDBU4OT2NWYGX525CKFFVHTRDJ7Q5DJRMRZQIQJOW5GVBY43XVI; jwotest_product=99; __jda=122270672.16137119479101182770449.1613711948.1613738165.1613748918.4; JSESSIONID=C06EC8D2E9384D2628AE22B1A6F9F8FC.s1; shshshsID=ab2ca3143928b1b01f6c5b71a15fcebe_5_1613750374847; __jdb=122270672.5.16137119479101182770449|4.1613748918',
    'Referer': 'https://www.jd.com/'
}
 
num=0   # 商品数量
comments_num=0   # 评论数量
 
# 获取商品信息和SkuId
def getIndex(url):
    global num
    skuids=[]
    session=requests.Session()
    session.headers=headers
    res=session.get(url,headers=headers)
    print(res.status_code)
    res.encoding=res.apparent_encoding
    soup=BeautifulSoup(res.text,'lxml')
    items=soup.select('li.gl-item')
    for item in items[:3]:  # 爬取3个商品测试
        title=item.select_one('.p-name a em').text.strip().replace(' ','')
        price=item.select_one('.p-price strong').text.strip().replace('¥','')
        try:
            shop=item.select_one('.p-shopnum a').text.strip()   # 获取书籍时查找店铺的方法
        except:
            shop=item.select_one('.p-shop a').text.strip()  #   获取其他商品时查找店铺的方法
        link=parse.urljoin('https://',item.select_one('.p-img a').get('href'))
        SkuId=re.search('\d+',link).group()
        skuids.append(([SkuId,session],None))
        headers['Referer'] = f'https://item.jd.com/{SkuId}.html'
        headers['Connection'] = 'keep-alive'
        comments_num=getCommentsNum(SkuId,session)  # 评论数量
        print(SkuId,title, price, shop, link, comments_num)
        print("开始将商品存入数据库...")
        try:
            IntoGoods(SkuId,title, price, shop, link, comments_num)
        except Exception as e:
            print(e)
            sess_db.rollback()
        num += 1
    print("开始获取评论并存入数据库...")
    pool2=threadpool.ThreadPool(3)   # 可同时获取3个商品的评论
    task=threadpool.makeRequests(getComments,skuids)
    for r in task:
        pool2.putRequest(r)
    pool2.wait()
 
# 获取评论
def getComments(SkuId,sess):
    # 获取评论总页数
    url1 = f'https://club.jd.com/comment/productPageComments.action?productId={SkuId}&score=0&sortType=5&page=0&pageSize=10'
    res2 = sess.get(url1, headers=headers)
    res2.encoding = res2.apparent_encoding
    json_data = json.loads(res2.text)
    max_page = json_data['maxPage']  # 经测试最多可获取100页评论,每页10条
    print("{}评论共{}页".format(SkuId, max_page))
    if max_page == 0:
        IntoComments(SkuId, '0')
    else:
        for i in range(0, max_page):
            # 使用此链接获取评论得到的为json格式
            url2 = f'https://club.jd.com/comment/productPageComments.action?productId={SkuId}&score=0&sortType=5&page={i}&pageSize=10'
            # 使用此链接获取评论得到的非json格式,需要提取
            # url2_2=f'https://club.jd.com/comment/productPageComments.action?callback=jQuery9287224&productId={SkuId}&score=0&sortType=5&page={i}&pageSize=10'
            print("开始获取第{}页评论:{}".format(i + 1, url2))
            getComments_one(sess, SkuId, url2)
            time.sleep(1)
 
# 获取评论总数量
def getCommentsNum(SkuId,sess):
    url=f'https://club.jd.com/comment/productCommentSummaries.action?referenceIds={SkuId}'
    res=sess.get(url)
    try:
        res.encoding=res.apparent_encoding
        json_data=json.loads(res.text)  # json格式转为字典
        num=json_data['CommentsCount'][0]['CommentCount']
        return num
    except:
        return 'Error'
 
# 获取单个评论
def getComments_one(sess,SkuId,url2):
    global comments_num
    res2 = sess.get(url2)
    res2.encoding=res2.apparent_encoding
    json_data=res2.text
    '''
    # 如果用url2_2需要进行如下操作提取json
    start = res2.text.find('jQuery9287224(') + len('jQuery9287224(')
    end = res2.text.find(');')
    json_data=res2.text[start:end]
    '''
    dict_data = json.loads(json_data)
    comments=dict_data['comments']
    for item in comments:
        comment=item['content'].replace('\n','')
        # print(comment)
        comments_num+=1
        try:
            IntoComments(SkuId,comment)
        except Exception as e:
            print(e)
            print("rollback!")
            sess_db.rollback()
 
# 商品信息入库
def IntoGoods(SkuId,title, price, shop, link, comments_num):
    goods_data=Goods(
        sku_id=SkuId,
        name=title,
        price=price,
        comments_num=comments_num,
        shop=shop,
        link=link
    )
    sess_db.add(goods_data)
    sess_db.commit()
 
# 评论入库
def IntoComments(SkuId,comment):
    comments_data=Comments(
        sku_id=SkuId,
        comments=comment
    )
    sess_db.add(comments_data)
    sess_db.commit()
 
if __name__ == '__main__':
    start_time=time.time()
    urls=[]
    KEYWORD=parse.quote(input("请输入要查询的关键词:"))
    for i in range(1,2):    # 爬取一页进行测试
        url=f'https://search.jd.com/Search?keyword={KEYWORD}&wq={KEYWORD}&page={i}'
        urls.append(([url,],None))  # threadpool要求必须这样写
    pool=threadpool.ThreadPool(2)  # 2个线程的线程池
    reque=threadpool.makeRequests(getIndex,urls)    # 创建任务
    for r in reque:
        pool.putRequest(r)  # 向线程池提交任务
    pool.wait() # 等待所有任务执行完毕
    print("共获取{}件商品,获得{}条评论,耗时{}".format(num,comments_num,time.time()-start_time))

总结:

京东的反爬有点强,如果不想爬取到空白页,只能用单线程加延时一条一条的爬

到此这篇关于Python爬取京东商品信息评论存并进MySQL的文章就介绍到这了!

Python 相关文章推荐
python中Switch/Case实现的示例代码
Nov 09 Python
Python实现自定义顺序、排列写入数据到Excel的方法
Apr 23 Python
python经典趣味24点游戏程序设计
Jul 26 Python
django 单表操作实例详解
Jul 30 Python
python selenium循环登陆网站的实现
Nov 04 Python
python+opencv实现移动侦测(帧差法)
Mar 20 Python
python如何实现读取并显示图片(不需要图形界面)
Jul 08 Python
使用tensorflow进行音乐类型的分类
Aug 14 Python
Django中使用Celery的方法步骤
Dec 07 Python
python获取淘宝服务器时间的代码示例
Apr 22 Python
Python数据类型最全知识总结
May 31 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 Python
Python实现批量将文件复制到新的目录中再修改名称
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 #Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 #Python
Python闭包的定义和使用方法
Apr 11 #Python
什么是Python装饰器?如何定义和使用?
Apr 11 #Python
Python经常使用的一些内置函数
python处理json数据文件
You might like
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
php中__toString()方法用法示例
2016/12/07 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
python中map的基本用法示例
2018/09/10 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
会计专业自我鉴定
2014/02/10 职场文书
市场营销策划方案
2014/06/11 职场文书
庆六一开幕词
2015/01/29 职场文书
暑期实践个人总结
2015/03/06 职场文书
资料员岗位职责范本
2015/04/13 职场文书
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB