鱼C论坛

 找回密码
 立即注册
查看: 2652|回复: 4

[已解决]爬虫json解析问题

[复制链接]
发表于 2017-7-27 19:31:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
写的爬虫总是报这样一个错误应该是json解析问题,我查了半天也没有解决,有没有大神帮忙看一下
  1. Traceback (most recent call last):
  2.   File "F:/Python爬虫/街拍/spider.py", line 66, in <module>
  3.     main()
  4.   File "F:/Python爬虫/街拍/spider.py", line 62, in main
  5.     result=parse_page_detail(html,each)
  6.   File "F:/Python爬虫/街拍/spider.py", line 42, in parse_page_detail
  7.     data=json.loads(result.group(1))
  8.   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\json\__init__.py", line 319, in loads
  9.     return _default_decoder.decode(s)
  10.   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\json\decoder.py", line 339, in decode
  11.     obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  12.   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\json\decoder.py", line 355, in raw_decode
  13.     obj, end = self.scan_once(s, idx)
  14. json.decoder.JSONDecodeError: Invalid \uXXXX escape: line 1 column 4086 (char 4085)
复制代码


以下是源代码
  1. import json
  2. import re
  3. from urllib.parse import urlencode

  4. import pymongo
  5. import requests
  6. from bs4 import BeautifulSoup
  7. from config import *

  8. client=pymongo.MongoClient(MONGO_URL)
  9. db=client[MONGO_DB]
  10. #获取索引页
  11. def get_page_index(offset,keyword):
  12.     data={
  13.         'offset': offset,
  14.         'format': 'json',
  15.         'keyword': keyword,
  16.         'autoload': 'true',
  17.         'count': '20',
  18.         'cur_tab': 3
  19.     }
  20.     url='http://www.toutiao.com/search_content/?' + urlencode(data)#把字典编码成url数据形式
  21.     response = requests.get(url)
  22.     return response.text

  23. #解析索引页
  24. def parse_page_index(html):
  25.     data=json.loads(html)
  26.     if data and 'data' in data.keys():
  27.         for each in data.get('data'):#获取数据中的
  28.             yield each.get('article_url')
  29. def get_page_detail(url):
  30.     response = requests.get(url)
  31.     return response.text

  32. def parse_page_detail(html,url):
  33.     soup=BeautifulSoup(html,'lxml')
  34.     title=soup.select('title')[0].get_text()
  35.     r=re.compile('var gallery =.*?(.*?);',re.S)
  36.     result=re.search(r,html)#正则表达式获取页面js代码中gallery,存储着组图的地址
  37.     if result:
  38.         data=json.loads(result.group(1))
  39.         if data and 'sub_images' in data.keys():
  40.             sub_images=data.get('sub_images')
  41.             for each in sub_images:#循环读取组图的地址
  42.                 image_url=each.get('url')
  43.                 return{
  44.                     'tltle': title,
  45.                     'url': url,
  46.                     'image_url':image_url
  47.                 }
  48. '''def save_mongodb(result):
  49.     if db[MONGO_TABLE].insert(result):
  50.         print('存储到Mongodb成功',result)
  51.         return True
  52.     return False'''
  53. def main():
  54.     html = get_page_index(0,'街拍')
  55.     for each in parse_page_index(html):#
  56.         html=get_page_detail(each)
  57.         if html:
  58.             result=parse_page_detail(html,each)
  59.             #save_mongodb(result)
  60.             print(result)
  61. if __name__== '__main__':
  62.     main()
复制代码
最佳答案
2017-7-27 23:10:36
把 result.group(1) print 出来你就知道为什么了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-27 23:10:36 | 显示全部楼层    本楼为最佳答案   
把 result.group(1) print 出来你就知道为什么了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-7-28 09:38:33 | 显示全部楼层
hldh214 发表于 2017-7-27 23:10
把 result.group(1) print 出来你就知道为什么了

print result.group(1)会显示AttributeError: 'NoneType' object has no attribute 'group'这样的错误,是说有的网页没有被正则匹配到报错吗?可是我已经加了个if result的判断啊,应该怎么修改,求教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-28 15:29:28 | 显示全部楼层
zkamsk 发表于 2017-7-28 09:38
print result.group(1)会显示AttributeError: 'NoneType' object has no attribute 'group'这样的错误, ...

说明你的 if 条件不够严格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-28 17:02:41 | 显示全部楼层
hldh214 发表于 2017-7-28 15:29
说明你的 if 条件不够严格

现在已经可以正常运行了,在别的地方多加了几个判断,我忘了加哪了,不过还是谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 10:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表