设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 6840|回复: 4
打印 上一主题 下一主题

requests获取网页代码解析的时候json.loads出问题

[复制链接]

12

主题

0

好友

122

积分

注册会员

Rank: 2

跳转到指定楼层
楼主
发表于 2018-1-23 22:10:31 |只看该作者 |倒序浏览
爬的是今日头条里面的图片,但是在这个网页里面出问题了
https://www.toutiao.com/a6514108163745120771/

snap3496.jpg

很明显,图片是包含在这个里面的,这是json

但是这个里面有一个反斜杠,搞不清楚是为什么?

image_pattern = re.compile('gallery: JSON.parse(.*?)siblingList', re.S)
img = re.findall(image_pattern, response.text)

用了一个正则把这个字符串给提取出来,提取出来的是一个列表

snap3497.jpg

由于前面多了些括号,而且里面有个反斜杠,所以对这个字符串进行了处理

img[0].replace('\\','').strip()[2:-3]

再转换json对象的时候出错

data=json.loads(img[0].replace('\\','').strip()[2:-3])

snap3498.jpg

分析的那个字符串发现的问题

snap3499.jpg

把这段更改一下程序就可以执行下去,网页中看到了问题所在

snap3500.jpg

是这个引号出问题了,不知道该怎么解决,抓了前十页的图,就这个地方出问题了,折腾了我一天,新手遇到问题没有办法呀


回复

使用道具 举报

0

主题

0

好友

137

积分

注册会员

Rank: 2

沙发
发表于 2018-1-24 09:49:42 |只看该作者
def parse_page_detail(html,url): #解析子页面
    soup = BeautifulSoup(html,'lxml')
    title = soup.select('title')[0].get_text()
    #print(title)
    images_pattern = re.compile('gallery: JSON.parse\((.*?)\),\n',re.S)
    result = re.search(images_pattern,html)
    if result:
        #print(result.group(1))
        data = json.loads(result.group(1)) #loads方法应该是把json对象转化为字典,但这里不知道为什么成了字符串对象?
        data = eval(data)  # 将字符串对象转化为字典,用eval或exec方法。
        if data and 'sub_images' in data.keys():
            sub_images = data.get('sub_images')
            #print(sub_images)
            images = [item.get('url') for item in sub_images]
            #print(images)
            for image in images:
                image = image.replace('\\','')
                #print(image)
                download_image(image)
            return {
                'title':title,
                'url':url,
                'images':images

                }

给你参考一下
回复

使用道具 举报

12

主题

0

好友

122

积分

注册会员

Rank: 2

板凳
发表于 2018-1-24 14:33:19 |只看该作者
zhaolehua 发表于 2018-1-24 09:49
def parse_page_detail(html,url): #解析子页面
    soup = BeautifulSoup(html,'lxml')
    title = soup. ...

兄弟 谢谢了,已经弄好了,是在正则的地方出问题了 ,又学了一招,感谢

snap3501.jpg
回复

使用道具 举报

0

主题

0

好友

137

积分

注册会员

Rank: 2

地板
发表于 2018-1-24 15:30:54 |只看该作者
loads方法应该是把json对象转化为字典,但这里不知道为什么成了字符串对象?
你知道这是怎么回事吗?
你把你loads后的数据type()一下看看是什么类型
回复

使用道具 举报

12

主题

0

好友

122

积分

注册会员

Rank: 2

5#
发表于 2018-1-25 15:24:43 |只看该作者
zhaolehua 发表于 2018-1-24 15:30
loads方法应该是把json对象转化为字典,但这里不知道为什么成了字符串对象?
你知道这是怎么回事吗?
你把 ...

是str,这个不晓得怎么回事
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-22 04:36 , Processed in 0.025027 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部