我既误杀阿朱,此生终
不再娶。阿朱就是阿朱,四海列国,千秋万载,就只一个阿朱。岂是一千个、一万个汉人美女所能代替得了的?
金庸
欢迎大家加入小编创建的Python行业交流群,有大牛答疑,有资源共享,有企业招人!是一个非常不错的交流基地!群号:683380553
本文来自《小甲鱼python基础》,下面的注释是我的笔记,视频没法共享,请到淘宝官网支持正版,共建和谐社会,支持版权,侵删,进入 淘宝官网,在搜索框输入关键词“零基础入门学习Python”并搜索
可以看到上方的 URL 变得很长(增加了很多查询字符串):https://s.taobao.com/search?q=%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8%E5%AD%A6%E4%B9%A0Python&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20171102&ie=utf8,问号后面的都是查询字符串,用&把它们拼接起来
经过多番测试,这个 URL 只需要包含 https://s.taobao.com/search?q=零基础入门学习python即可
这里有个坑,淘宝反爬虫,就是使用默认的搜索会自带一些广告商品和无关内容,并且,从浏览器看一个页面是 44 个商品,但爬虫解析到的却是 36 个,更惨的是,爬虫获取的数据跟浏览器看到的还不完全一致,大家也可以自己尝试一下,没有思路的鱼油请继续往下看,最后有代码清单
按销量排序,在上一个思路碰壁之后,我们决定另辟蹊径,既然是要统计销量,何不让商品按照销量来排序呢
OK,发现链接多了个查询字符串:&sort=sale-desc,表示按销量排序,爬一下试试
导入模块
定义open_url,用来打开链接,返回链接的内容
我们把上面获得的查询关键字组成一个字典,第一个元素的键是q,值是keyword,第二个元素的键是sort,值是sale-desc,我们的requests会自动的把payload字典的内容转化为对应的查询字符串,添加到查询链接里面去
代码
把网址赋值给url
完整代码
运行代码并输入关键词“零基础入门学习Python”,我们得到一个 items.txt 的文本文件,有些童鞋可能会问,为啥不将 res.text 直接打印出来呢? 因为会死机,Python 的 IDLE 对于大量数据显示还是比较鸡肋的……,然后使用正则表达式提取关键数据 ,打开文本文件,我们得到下面这个东西
我们关注的数据都在 g_page_config 里面,所以现在的问题就变成了如何将 g_page_config 的内容单独提取出来, 从一个巨大的文本中提取局部带有特征的字符串,必须使用正则表达式,用下面的正则表达式提取 g_page_config 的内容
以为一目了然的方式还原数据结构 ,结构还是太复杂了,没眼看,由于存在很大字典间的嵌套,所以看起来很杂乱
我们可以写几行代码,将这些字典的层次结构给打印出来,注意,g_page_config 里面存放的数据是 JSON 格式,使用 json.loads() 方法可以将字符串还原为 Python 的数据结构。
下面,我们将嵌套字典的键按层次打印出来
这下层次清晰多了,当下面没有字典了,就打印键的值,并且在键的值前面写上一个-号,如果下面还有字典,打印这个键的值,并且在它前面加一个+号
提取目标数据,来到刚开始生成的 items.txt 文件,不难发现我们的目标数据在"auctions" 这个键的值中,再仔细一看,"auctions" 对应的值其实是一个列表,其中每个元素又存在字典的嵌套,化繁为简,我们先将 "auctions" 的值提取出来(从上面打印的结构层次中,可以看出 "mod" -> "itemlist" -> "data" -> "auctions" 的嵌套关系)
page_items 即那个列表,接着分析下这个列表表面上都有哪些键:
参照 items.txt 文件对号入座
既然找到了这些目标数据,那么要提取出来并统计销量就是易如反掌的事儿啦:
代码清单
网友评论