python:崔庆才微博的爬取

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yk_0311/article/details/82500532

微博地址:https://m.weibo.cn/u/2830678474
代码
参考了书上的代码

from pyquery import PyQuery as pq
import requests


def getPage(page):
    url = 'https://m.weibo.cn/api/container/getIndex?'#在怎么来?分析Ajax请求
    hd = {"User-Agent": 'Mozilla'}  # 模仿浏览器
    params = {'type': 'uid',
              'value': '2830678474',
              'containerid': '1076032830678474',
              'page': page}  # 作为参数增加到url中去

    try:
        r = requests.get(url, headers=hd, params=params)
        r.raise_for_status()
        return r.json()  # 解析为JSON返回
    except:
        print('-----')


def parsePage(json):
    if json:
        items = json.get('data').get('cards')  # 是一个列表
        for item in items:
            item = item.get('mblog')  # 是一个字典
            if item == None:
                continue
            content = {}
            content['data'] = item.get('created_at')  # 日期
            content['text'] = pq(item.get('text')).text()  # 借助pyquery将正文中的HTML标签去掉了
            content['source'] = item.get('source')  # 用什么发表
            yield content


def main():
    for i in range(1, 11):  # 爬取到第十页结束
        json = getPage(i)
        results = parsePage(json)
        for result in results:
            print(result)


main()

其中用到了异常处理
返回的是一个json对象

我添加了

if item==None:
continue

为什么?因为item可能会是None,书上的代码并不完全是正确的

content['text'] = pq(item.get('text')).text()  # 借助pyquery将正文中的HTML标签去掉了

这一段代码将正文的HTML标签给去掉了,也不错

猜你喜欢

转载自blog.csdn.net/Yk_0311/article/details/82500532
今日推荐