1 # -*- coding: utf-8 -*-
2 # @Time : 2020/8/18 15:39
3 # @Author : Chunfang
4 # @Email : 3470959534@qq.com
5 # @File : Weibo_content.py
6 # @Software: PyCharm
7
8 from urllib.parse import urlencode
9 import requests
10 from pyquery import PyQuery as pq
11 import time
12 import os
13 import csv
14 import json
15
16 base_url = 'https://m.weibo.cn/api/container/getIndex?'
17
18 headers = {
19 'Host': 'm.weibo.cn',
20 'Referer': 'https://m.weibo.cn/u/2830678474',
21 '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',
22 'X-Requested-With': 'XMLHttpRequest',
23 }
24 class SaveCSV(object):
25
26 def save(self, keyword_list,path, item):
27 """
28 保存csv方法
29 :param keyword_list: 保存文件的字段或者说是表头
30 :param path: 保存文件路径和名字
31 :param item: 要保存的字典对象
32 :return:
33 """
34 try:
35 # 第一次打开文件时,第一行写入表头
36 if not os.path.exists(path):
37 with open(path, "w", newline='', encoding='utf-8-sig') as csvfile: # newline='' 去除空白行
38 writer = csv.DictWriter(csvfile, fieldnames=keyword_list) # 写字典的方法
39 writer.writeheader() # 写表头的方法
40
41 # 接下来追加写入内容
42 with open(path, "a", newline='', encoding='utf-8-sig') as csvfile: # newline='' 一定要写,否则写入数据有空白行
43 writer = csv.DictWriter(csvfile, fieldnames=keyword_list)
44 writer.writerow(item) # 按行写入数据
45 print("^_^ write success")
46
47 except Exception as e:
48 print("write error==>", e)
49 # 记录错误数据
50 with open("error.txt", "w") as f:
51 f.write(json.dumps(item) + ",\n")
52 pass
53
54 def get_page(page,title): #得到页面的请求,params是我们要根据网页填的,就是下图中的Query String里的参数
55 params = {
56 'containerid': '100103type=1&q='+title,
57 'page': page,#page是就是当前处于第几页,是我们要实现翻页必须修改的内容。
58 'type':'all',
59 'queryVal':title,
60 'featurecode':'20000320',
61 'luicode':'10000011',
62 'lfid':'106003type=1',
63 'title':title
64 }
65 url = base_url + urlencode(params)
66 print(url)
67 try:
68 response = requests.get(url, headers=headers)
69 if response.status_code == 200:
70 print(page)
71 return response.json()
72 except requests.ConnectionError as e:
73 print('Error', e.args)
74
75 # 解析接口返回的json字符串
76 def parse_page(json , label):
77 res = []
78 if json:
79 items = json.get('data').get('cards')
80 for i in items:
81 if i == None:
82 continue
83 item = i.get('mblog')
84 if item == None:
85 continue
86 weibo = {}
87 weibo['id'] = item.get('id')
88 weibo['label'] = label
89 weibo['text'] = pq(item.get('text')).text().replace(" ", "").replace("\n" , "")
90 res.append(weibo)
91 return res
92
93 if __name__ == '__main__':
94
95 title = input("请输入搜索关键词:")
96 path = "article.csv"
97 item_list = ['id','text', 'label']
98 s = SaveCSV()
99 for page in range(10,20):#循环页面
100 try:
101 time.sleep(1) #设置睡眠时间,防止被封号
102 json = get_page(page , title )
103 results = parse_page(json , title)
104 if requests == None:
105 continue
106 for result in results:
107 if result == None:
108 continue
109 print(result)
110 s.save(item_list, path , result)
111 except TypeError:
112 print("完成")
113 continue

Python爬虫__微博某个话题的内容数据的更多相关文章

  1. python爬虫Scrapy(一)-我爬了boss数据

    一.概述 学习python有一段时间了,最近了解了下Python的入门爬虫框架Scrapy,参考了文章Python爬虫框架Scrapy入门.本篇文章属于初学经验记录,比较简单,适合刚学习爬虫的小伙伴. ...

  2. Python爬虫框架Scrapy实例(三)数据存储到MongoDB

    Python爬虫框架Scrapy实例(三)数据存储到MongoDB任务目标:爬取豆瓣电影top250,将数据存储到MongoDB中. items.py文件复制代码# -*- coding: utf-8 ...

  3. Python爬虫入门教程 30-100 高考派大学数据抓取 scrapy

    1. 高考派大学数据----写在前面 终于写到了scrapy爬虫框架了,这个框架可以说是python爬虫框架里面出镜率最高的一个了,我们接下来重点研究一下它的使用规则. 安装过程自己百度一下,就能找到 ...

  4. 【转】Python爬虫:抓取新浪新闻数据

    案例一 抓取对象: 新浪国内新闻(http://news.sina.com.cn/china/),该列表中的标题名称.时间.链接. 完整代码: from bs4 import BeautifulSou ...

  5. Python爬虫:抓取新浪新闻数据

    案例一 抓取对象: 新浪国内新闻(http://news.sina.com.cn/china/),该列表中的标题名称.时间.链接. 完整代码: from bs4 import BeautifulSou ...

  6. Python "爬虫"出发前的装备之二数据先行( Requests 模块)

    1. 概念 爬虫不是动物,而是一种计算机程序. 这种程序有自己特定的功能,能按照使用者给定的一系列规则自行浏览万维网并获取需要的信息.此类程序被称为 网络爬虫(web crawler) 或 网络蜘蛛( ...

  7. python爬虫__第一个爬虫程序

    前言 机缘巧合,最近在学习机器学习实战, 本来要用python来做实验和开发环境 得到一个需求,要爬取大众点评中的一些商户信息, 于是开启了我的第一个爬虫的编写,里面有好多心酸,主要是第一次. 我的文 ...

  8. python爬虫-模拟微博登录

    微博模拟登录 这是本次爬取的网址:https://weibo.com/ 一.请求分析 找到登录的位置,填写用户名密码进行登录操作 看看这次请求响应的数据是什么 这是响应得到的数据,保存下来 exect ...

  9. Python爬虫:微博粉丝列表

    前言 本来打算做一个关于微博粉丝列表的爬虫,可以统计一下某个微博账号的粉丝里面,僵尸粉(水军)的数量,大V数量. 结果写完爬虫才发现,现在微博只给人看粉丝列表的前5页.......哈哈,好吧.挺无奈的 ...

随机推荐

  1. C# WinForm 设置按纽为透明,使用背景色

    今天开发登陆界面时,遇到一个窗体控制设置问题: 1.将按纽设置为透明: 2.并且使用背景图片的颜色: 3.并且需要当点击这个按纽时,仍然显示背景图片颜色: 4.去掉按纽边框显示线: 需要的效果如下: ...

  2. dev编译器兼容设置及字符串的识别问题

    #include<bits/stdc++.h> using namespace std; bool cmp(char a,char b) { return a>b; } //int ...

  3. nginx反向代理失败,又是 fastdfs 的锅

    fdfs问题记录 [root@hostcad logs]# systemctl status fdfs_trackerd.service ● fdfs_trackerd.service - LSB: ...

  4. Redis的安装与启动(一)

    Redis是c语言开发的. 安装redis需要c语言的编译环境.如果没有gcc需要在线安装.yum install gcc-c++ 安装步骤: 第一步:redis的源码包上传到linux系统.--源码 ...

  5. SpringDataRedis的Keyspaces设置

    前言 原文:https://docs.spring.io/spring-data/redis/docs/2.3.2.RELEASE/reference/html/#redis.repositories ...

  6. java-設計模式-工場方法

      工廠方法: 一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型. 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中. 这满足创建型 ...

  7. cache + redis(一)

    一.缓存的概念 1.Buffer,Cache的区别: buffer: 一般用于写操作,写缓冲. cache: 一般用于读操作,读缓存. 它们都是解决速度不一致的问题,都设计到IO操作. 2.Cache ...

  8. Linux 安装jdk1.8

    Linux安装jdk1.8 总结一句话就是:下载jdk1.8 ==> 解压 ==> 配置环境变量. 一.  jdk的下载,这里有两种方法: 1.去Oracle官网下载. 2.jdk1.8的 ...

  9. 关于disabled的事,你用对了吗?

    大家都知道disabled属性用来禁用表单里的元素.如果让你来禁用一个表单元素,你会怎么做么,下面提供几种写法,各位看官请看 html: <button type='button'>tes ...

  10. RStudio中文乱码

    解决办法一: 1.设置RStudio文本显示的默认编码:RStudio菜单栏的Tools -> Global Options 2.code-->saving-->default te ...