鱼C论坛

 找回密码
 立即注册
查看: 1995|回复: 8

微博爬虫问题

[复制链接]
发表于 2018-11-2 16:56:02 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 康小泡 于 2018-11-2 18:33 编辑

做一个爬微博的
from urllib.parse import urlencode
import requests
base_url = 'https://m.weibo.cn/qpi/container/getIndex?'

headers = {
    'Host':'m.weibo.cn',
    'Referer':'https://m.weibo.cn/u/2830678474',
    'User-Agent':'Mozilla/5.0(Macintosh; Intel Mac OS X 10_12_3) AppleWebkit/537.36(KHTML, like Gecko)'
                 'Chrome/58.0.3029.110 Safari/537.36',
    'X-Requested-With': 'XMLHTTpRequest',
}
def get_page(page):
    params ={
        'type':'uid',
        'value':'2830678474',
        'containerid':'1076032830678474',
        'page':page
    }
    url = base_url + urlencode(params)
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.json()
    except requests.ConnectionError as e:
        print('Error', e.args)

from pyquery import PyQuery as pq

def parse_page(json):
    if json:
        items = json.get('data').get('cards')
        for item in items:
            item = item.get('mblog')
            weibo = {}
            weibo['id'] = item.get('id')
            weibo['text'] = pq(item.get('text')).text()
            weibo['attitudes'] = item.get('attitudes_count')
            weibo['comments'] = item.get('comments_count')
            weibo['reposts'] = item.get('reposts_count')
            yield weibo
if __name__ == '__main__':
    for page in range(1,11):
        json = get_page(page)
        results = parse_page(json)
        for result in results:
            print(result)
from pymongo import MongoClinent

client = MongoClinent()
db = client['weibo']
collection = db['weibo']

def save_to_mongo(result):
    if collection.insert(result):
        print('Saved to Mongo')
——————————————————————————————————
Traceback (most recent call last):
  File "D:/learn/pycharm/exercise/微博.py", line 45, in <module>
    for result in results:
  File "D:/learn/pycharm/exercise/微博.py", line 31, in parse_page
    items = json.get('data').get('cards')
AttributeError: 'NoneType' object has no attribute 'get'
这是要怎么修改啊新手求助谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-2 17:04:22 | 显示全部楼层
有点强迫症哈,希望以后发代码的时候用专用的代码格式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-2 17:28:10 | 显示全部楼层
这里写错了
items = json.get('data').get('cards')
应该写成(我没记错的话)
items = json.get(['data']['cards'])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-2 18:41:02 | 显示全部楼层
json等于了NoneType,
if json:
    xxxx
改成
if json  is not   None:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-5 16:07:16 | 显示全部楼层
wongyusing 发表于 2018-11-2 17:28
这里写错了
应该写成(我没记错的话)

不好意思排版确实有点问题哈哈哈哈
这个好像也不对
Traceback (most recent call last):
  File "D:/learn/pycharm/exercise/微博.py", line 45, in <module>
    for result in results:
  File "D:/learn/pycharm/exercise/微博.py", line 31, in parse_page
    items = json.get(['data']['cards'])
TypeError: list indices must be integers or slices, not str
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-5 16:28:39 | 显示全部楼层
康小泡 发表于 2018-11-2 18:41
json等于了NoneType,

改成

还是没变哈哈哈,不过我感觉这个也不太对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-5 16:37:34 | 显示全部楼层
华北小野狼 发表于 2018-11-5 16:07
不好意思排版确实有点问题哈哈哈哈
这个好像也不对
Traceback (most recent call last):


你先for一下这个字典的keys()。  
看一下你获取的内容是什么。  
我看了你贴出来的报错信息。  
这里应该是一个列表。  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-6 19:51:29 | 显示全部楼层
wongyusing 发表于 2018-11-5 16:37
你先for一下这个字典的keys()。  
看一下你获取的内容是什么。  
我看了你贴出来的报错信息。  

嗯嗯我知道了是这个微博API改了,谢谢老哥,麻烦了哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 23:48:22 | 显示全部楼层
你好这个是爬微博什么的鸭?我最近想爬超话里的微博诶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-26 15:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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