python:头条新闻微博的爬取

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

微博地址:
https://m.weibo.cn/u/1618051664?uid=1618051664&luicode=10000011&lfid=100103type%3D1%26q%3D%E5%A4%B4%E6%9D%A1%E6%96%B0%E9%97%BB

代码:

# 爬取今日头条的微博
import requests
from pyquery import PyQuery as pq

url = 'https://m.weibo.cn/api/container/getIndex?containerid=2304131618051664_-_WEIBO_SECOND_PROFILE_WEIBO&page_type=03'  #


def getJSON(page):
    hd = {'User-Agent': 'Mozilla'}  # 模拟浏览器进行访问
    params = {'page': page}
    try:
        r = requests.get(url, headers=hd, params=params)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        # print(r.json())  # 返回json对象
        return r.json()
    except:
        print('------')


def parsePage(json):
    if json:
        items = json.get('data').get("cards")  # 由Network,XHR中检查到是一个列表类型,返回一个列表
        for item in items:  # 每一个item又是一个字典
            item = item.get('mblog')  # 字典类型
            if item == None:
                continue
            content = {}  # 创建一个字典
            content['时间'] = item.get('created_at')
            content['内容'] = pq(item.get('text')).text()  # 利用pyquery将正文中的HTML标签去掉
            content['发布设备'] = item.get('source')
            content['获赞数'] = item.get('attitudes_count')
            content['评论数'] = item.get('comments_count')
            yield content  # yield关键字,表明这个函数是一个generator,直接使用for循环来迭代


def main():
    for i in range(1, 3):  # 爬取第一页,第二页的内容
        r = getJSON(i)
        results = parsePage(r)
        for result in results:
            print(result)


main()

yield关键字的声明表明这个函数是一个generator

猜你喜欢

转载自blog.csdn.net/Yk_0311/article/details/82500973