问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python爬json数据不知道有多少页(2023年最新整理)

发布网友 发布时间:2024-09-17 21:40

我来回答

1个回答

热心网友 时间:2024-09-24 17:25

导读:很多朋友问到关于python爬json数据不知道有多少页的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!

如何在scrapy框架下用python爬取json文件

importjson

str=str[(str.find('(')+1):str.rfind(')')]#去掉首尾的圆括号前后部分

dict=json.loads(str)

comments=dict['comments']

#然后for一下就行了

如果是scrapy看下面代码。

defparse(self,response):

jsonresponse=json.loads(response.body_as_unicode())

item=MyItem()

item["firstName"]=jsonresponse["firstName"]

returnitem

Python爬虫(七)数据处理方法之JSON

JSON指的是JavaScript对象表示法(JavaScriptObjectNotation),是轻量级的文本数据交换格式,且具有自我描述性,更易理解。

JSON看起来像python类型(列表,字典)的字符串。

在之前的文章中,我们说到了怎么用response的方法,获取到网页正确解码后的字符串。如果还有不懂的,可以先阅读Python爬虫(三)Requests库。接下来以有道翻译为例子,说说怎么通过网页解码后的字符串,提取到翻译结果。

再结合上述有道翻译的例子,得到字典类型的返回结果,并提取出来翻译结果。

将上述例子的dict_json换成str字符串,再写入文本中。

执行完上述的程序,会得到一个fanyi.txt的文件,其结果如下:{"type":"ZH_CN2EN","errorCode":0,"elapsedTime":1,"translateResult":[[{"src":"\u4eba\u751f\u82e6\u77ed\uff0c\u6211\u7528python","tgt":"Lifeistooshort,Iusepython"}]]}。这样子的一份文档,中文部分显示的是二进制,且格式非常不利于阅读,这并不是我们想要的结果。好在json.dumps()为我们提供的两个方法,以帮助我们更好阅读文档。

1.ensure_ascii,能够让中文显示成中文;

2.indent,能够让下一行在第一行的基础上空格。

其用法如下:

如何爬虫天猫店铺数据python

本编博客是关于爬取天猫店铺中指定店铺的所有商品基础信息的爬虫,爬虫运行只需要输入相应店铺的域名名称即可,信息将以csv表格的形式保存,可以单店爬取也可以增加一个循环进行同时爬取。

源码展示

首先还是完整代码展示,后面会分解每个函数的意义。

#-*-coding:utf-8-*-

importrequests

importjson

importcsv

importrandom

importre

fromdatetimeimportdatetime

importtime

classTM_producs(object):

def__init__(self,storename):

self.storename=storename

self.url=''.format(storename)

self.headers={

"user-agent":"Mozilla/5.0(iPhone;CPUiPhoneOS9_1likeMacOSX)AppleWebKit/601.1.46"

"(KHTML,likeGecko)Version/9.0Mobile/13B143Safari/601.1"

}

datenum=datetime.now().strftime('%Y%m%d%H%M')

self.filename='{}_{}.csv'.format(self.storename,datenum)

self.get_file()

defget_file(self):

'''创建一个含有标题的表格'''

title=['item_id','price','quantity','sold','title','totalSoldQuantity','url','img']

withopen(self.filename,'w',newline='')asf:

writer=csv.DictWriter(f,fieldnames=title)

writer.writeheader()

return

defget_totalpage(self):

'''提取总页码数'''

num=random.randint(83739921,87739530)

endurl='/shop/shop_auction_search.do?sort=sp=1page_size=12from=h5ajson=1_tm_source=tmallsearchcallback=jsonp_{}'

url=self.url+endurl.format(num)

html=requests.get(url,headers=self.headers).text

infos=re.findall('\(({.*})\)',html)[0]

infos=json.loads(infos)

totalpage=infos.get('total_page')

returnint(totalpage)

defget_products(self,page):

'''提取单页商品列表'''

num=random.randint(83739921,87739530)

endurl='/shop/shop_auction_search.do?sort=sp={}page_size=12from=h5ajson=1_tm_source=tmallsearchcallback=jsonp_{}'

url=self.url+endurl.format(page,num)

html=requests.get(url,headers=self.headers).text

infos=re.findall('\(({.*})\)',html)[0]

infos=json.loads(infos)

products=infos.get('items')

title=['item_id','price','quantity','sold','title','totalSoldQuantity','url','img']

withopen(self.filename,'a',newline='')asf:

writer=csv.DictWriter(f,fieldnames=title)

writer.writerows(products)

defmain(self):

'''循环爬取所有页面宝贝'''

total_page=self.get_totalpage()

foriinrange(1,total_page+1):

self.get_products(i)

print('总计{}页商品,已经提取第{}页'.format(total_page,i))

time.sleep(1+random.random())

if__name__=='__main__':

storename='uniqlo'

tm=TM_producs(storename)

tm.main()

上面代码是选择了优衣库作为测试店铺,直接输入优衣库店铺的域名中关键词即可,最终表格会按照店铺名称和时间名词。

代码解读

导入库说明

requests?库不用多数,爬取网页的主要库

json?库是用来解析json格式的数据的,也就是Python中的字典格式

csv?库是用来创建csv表格和保存信息的

random?库是用来生成一个随机数的,这个代码中用到了两次,第一次是生成一个随机数据去获取最新的网页信息而不是缓存信息,第二次是随机一个时间,来减缓爬虫速度

re?库是正则,主要用来提取信息

datetime?和?time?都是时间库,前者一般用来生成当前时间字符串,后者本爬虫使用设置延迟时间

爬虫思路

首先通过分析手机端天猫店铺所有商品的网页,可以发现每次下滑一页都有一个js被加载,这个js的规律可以总结一下;

通过分析可以发现每次请求js都可以得到一个关键信息,那就是total_page这个参数,这也一想就能猜到,就是当前店铺的总页码数,所以可以先取得这个数字,然后使用循环爬取全店商品;

每一页有24个商品,而请求得到的是一个类似于json格式的网页信息,但是并非是直接的json,所以可以用正则表达式提取符合json格式的部分留用;

将每一页的信息保存到csv表格中,可以直接使用csv库的字典存储方式,非常方便;

得到了单页的信息,也得到了总页码数,只需要一个循环就可以爬取全店的商品了。

构造爬虫类

def__init__(self,storename):

??self.storename=storename

??self.url='.format(storename)

??self.headers={

????"user-agent":"Mozilla/5.0(iPhone;CPUiPhoneOS9_1likeMacOSX)AppleWebKit/601.1.46"

??????????"(KHTML,likeGecko)Version/9.0Mobile/13B143Safari/601.1"

??}

??datenum=datetime.now().strftime('%Y%m%d%H%M')

??self.filename='{}_{}.csv'.format(self.storename,datenum)

??self.get_file()

上面代码依次完成以下操作:

首先整个爬虫是写成了一个类,在初始化类的时候需要传递一个参数,这个参数就是店铺的名称。

然后构造出店铺的所有商品页面的前半部分,这部分都是不会变的

接着设置一个请求头

按照当前时间生成一个以时间为依据的字符串,用来给文件命名,然后赋值给文件名称,确定保存文件的名称

最后一句是在类生成的时候就运行这个函数,及生成一个带有标题的表格,后面会说道这个函数的具体含义

利用Python爬取数据翻页时,一共100页,我只想要5页的数据,用什么代码停止翻页呢?

1、首先分析页面源代码中翻页处的特征,按规则取下一页地址适合页面地址不连续时,可通过正则表达式实现,如果页面地址为连续的,则直接按连续的地址获取数据。

2、按以上特征获取后面地址,通过urllib.request.urlopen(url)得到首页面的数据。可以通过正则表达式获取数据,也可按特征字符串定来取到数据。

3、如为规则网地址方式,可以使用线程来提高效率。

如何用python读取json里面的值啊

1、首先需要在桌面新建‘json.txt’文件,内容为jsonline格式。

2、打开Python开发工具IDLE,新建‘json.py’文件,并按照如图所示书写代码。

3、F5运行程序,Shell打印出json文本信息。

4、这是一次性读取所有内容,如果文件很大的情况,出于性能考虑要分批读取内容,这样要用到yield生成器,改写lines()函数如下,注意yield一定要写在with里,这样才能每次从上一次读取的位置继续读取。

5、继续写程序入口函数,这里要注意readlines返回的是一个列表,要读取里面的内容,要再做一个循环来遍历。

6、F5运行程序,Shell打印出json文本信息,这个利用生成器方式读取的方式经常处理较大的文件。

结语:以上就是首席CTO笔记为大家整理的关于python爬json数据不知道有多少页的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
现在五粮液000858可以买进么? 2021年五粮液(000858)总资产、总负债、营业收入、营业成本及净利润统... 手机耗电太快了怎么解决 教你方法,轻松解决 Tag模块数组indexOf,splice的使用方法 JavaScript indexOf简介 对于一个JS对象数组怎么使用IndexOf方法得到索引呢? Array.indexOf() 学习 狼来了是什么效应 当两种刺激都出现,认知者会产生首因效应还是近因效应呢? 大过年的…… 【098】在线Cron表达式生成器-在线生成Cron,格式化Xml C++实现JSON转换(重点看nlohmann/json的使用) DATUM-支持不同格式(JSON,CSV,SQL,XML等)的在线模拟数据生成器 淘宝怎么改背景? 一孔之是什么意思 金粉世家怎么造句 服务器使用XFTP快捷连接Linux服务器xftp连接linux linux下使用ssh命令连接另一台linux服务器 远程连接Linux服务器的指南如何远程linux服务器 Spring Boot实战:整合Redis、MyBatis,封装RedisUtils工具类_百度... 连接Linux服务器的步骤指南怎么连接linux服务器 ObjectMapper,别再像个二货一样一直new了! 转载|json是什么,看了之后我才恍然大悟 java xml转fastjson,转对象 骨头汤怎么造句 安保工作内容 争得面红耳赤造句 苹果ios18怎么升级 ios18什么时候发布 苹果ios18什么时候推送 django有什么装饰器(哪些网站用django做的) m号和xl哪个大 m.l.xl分别代表什么尺码 2XL大还是M号大? 新手怎么正确使用医美面膜? 新真露竹炭酒有后劲吗 韩国的真露竹炭酒喝多少会醉 真露竹碳酒怎么喝 醉驾拘役缓刑单位不知道如何处理? 被判缓刑单位会不会知晓 个人在判处缓刑,没有通知单位,个人有过错吗? 快手极速版为什么老自动播放? 快手极速版连播怎么取消 郑董睿(瑞)这名字难听吗? 芜湖大数据费用需要多少? 芜湖商高大数据技术有限公司怎么样 五竹打得过庆帝吗,五竹为什么打不过庆帝呢 浑南新区的前景如何? 辽宁沈阳属于几线城市 大连与沈阳哪个更发达