老师,为什么我的数据,json.loads()报错加载不成功

来源:2-11 爬取淘宝网的数据

小禹o0

2018-12-26

图片描述

写回答

1回答

NavCat

2018-12-26

淘宝网又更新了,做了调整,需要cookie才能拿到正确的HTML,否则,拿到的是登录页面的html,你可以按照如下步骤操作:

1.在PC端登录淘宝,找到对应的请求头

//img.mukewang.com/szimg/5c231dc10001aba613250632.jpg

2.将登录后的cookie写入到请求头

text = requests.get(url, headers={
        'cookie': 'Your cookie'    # 这你写你的cookie
    }).text

    代码参考:

import requests
import re
import json
 
def spider_tb(sn ,book_list=[]):
    url = 'https://s.taobao.com/search?q={0}'.format(sn)
    #获取html内容
    text = requests.get(url, headers={
        'cookie': 'Your cookie'
    }).text
 
    # 使用正则表达式找到json对象
    p = re.compile(r'g_page_config = (\{.+\});\s*', re.M)
    # print(text)
    rest = p.search(text)
    print(rest)
    if rest:
        print(rest.group(1))
        data = json.loads(rest.group(1))
        bk_list = data['mods']['itemlist']['data']['auctions']
 
        print (len (bk_list))
        for bk in bk_list:
            #标题
            title = bk["raw_title"]
            print(title)
            #价格
            price = bk["view_price"]
            print(price)
            #购买链接
            link = bk["detail_url"]
            print(link)
            #商家
            store = bk["nick"]
            print(store)
            book_list.append({ 'title' : title, 'price' : price, 'link' : link, 'store' : store })
            print ('{title}:{price}:{link}:{store}'.format( title = title, price = price, link = link, store = store )) 
 
 
 
if __name__ == '__main__':
    spider_tb('9787115428028')


0
3
NavCat
回复
小禹o0
是的,目标网站会经常更新的,他们有反爬机制的,所以我们的爬虫程序也会经常变化。想要爬虫做得完善,得实现自动登陆,代理多个IP访问,模仿成真人的样子去爬数据。
2018-12-26
共3条回复

手把手教你把Python应用到实际开发 不再空谈语法

学会项目开发思路,掌握Python高阶用法。

1341 学习 · 244 问题

查看课程