Python爬虫__微博某个话题的内容数据
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爬虫__微博某个话题的内容数据的更多相关文章
- python爬虫Scrapy(一)-我爬了boss数据
一.概述 学习python有一段时间了,最近了解了下Python的入门爬虫框架Scrapy,参考了文章Python爬虫框架Scrapy入门.本篇文章属于初学经验记录,比较简单,适合刚学习爬虫的小伙伴. ...
- Python爬虫框架Scrapy实例(三)数据存储到MongoDB
Python爬虫框架Scrapy实例(三)数据存储到MongoDB任务目标:爬取豆瓣电影top250,将数据存储到MongoDB中. items.py文件复制代码# -*- coding: utf-8 ...
- Python爬虫入门教程 30-100 高考派大学数据抓取 scrapy
1. 高考派大学数据----写在前面 终于写到了scrapy爬虫框架了,这个框架可以说是python爬虫框架里面出镜率最高的一个了,我们接下来重点研究一下它的使用规则. 安装过程自己百度一下,就能找到 ...
- 【转】Python爬虫:抓取新浪新闻数据
案例一 抓取对象: 新浪国内新闻(http://news.sina.com.cn/china/),该列表中的标题名称.时间.链接. 完整代码: from bs4 import BeautifulSou ...
- Python爬虫:抓取新浪新闻数据
案例一 抓取对象: 新浪国内新闻(http://news.sina.com.cn/china/),该列表中的标题名称.时间.链接. 完整代码: from bs4 import BeautifulSou ...
- Python "爬虫"出发前的装备之二数据先行( Requests 模块)
1. 概念 爬虫不是动物,而是一种计算机程序. 这种程序有自己特定的功能,能按照使用者给定的一系列规则自行浏览万维网并获取需要的信息.此类程序被称为 网络爬虫(web crawler) 或 网络蜘蛛( ...
- python爬虫__第一个爬虫程序
前言 机缘巧合,最近在学习机器学习实战, 本来要用python来做实验和开发环境 得到一个需求,要爬取大众点评中的一些商户信息, 于是开启了我的第一个爬虫的编写,里面有好多心酸,主要是第一次. 我的文 ...
- python爬虫-模拟微博登录
微博模拟登录 这是本次爬取的网址:https://weibo.com/ 一.请求分析 找到登录的位置,填写用户名密码进行登录操作 看看这次请求响应的数据是什么 这是响应得到的数据,保存下来 exect ...
- Python爬虫:微博粉丝列表
前言 本来打算做一个关于微博粉丝列表的爬虫,可以统计一下某个微博账号的粉丝里面,僵尸粉(水军)的数量,大V数量. 结果写完爬虫才发现,现在微博只给人看粉丝列表的前5页.......哈哈,好吧.挺无奈的 ...
随机推荐
- dpwwn-01
环境配置 靶机下载地址: https://download.vulnhub.com/dpwwn/dpwwn-01.zip 下载好解压打开.vmx文件即可 启动后如图: 无法直接获得靶机ip,用kali ...
- 《Java多线程编程核心技术》知识梳理
<Java多线程编程核心技术> @author ergwang https://www.cnblogs.com/ergwang/ 文章末尾附pdf和png下载链接 第1章 Java多线程技 ...
- volatile 有什么用?能否用一句话说明下 volatile 的应用场景?
volatile 保证内存可见性和禁止指令重排. volatile 用于多线程环境下的单次操作(单次读或者单次写).
- Statement 和 PreparedStatement 有什么区别?哪个性 能更好?
与 Statement 相比,①PreparedStatement 接口代表预编译的语句,它主要的优 势在于可以减少 SQL 的编译错误并增加 SQL 的安全性(减少 SQL 注射攻击的可 能性):② ...
- NULL 是什么意思 ?
NULL 这个值表示 UNKNOWN(未知):它不表示""(空字符串).对 NULL 这 个值的任何比较都会生产一个 NULL 值.您不能把任何值与一个 NULL 值进行比 较,并 ...
- (stm32f103学习总结)—独立看门狗(IWDG)
一.IWDG介绍 1.1 IWDG简介 STM32F1芯片内部含有两个看门狗外设,一个是独立看门狗IWDG,另 一个是窗口看门狗WWDG.两个看门狗外设(独立和窗口)均可用于检测 并解决由软件错误导致 ...
- 8_LQR 控制器_状态空间系统Matlab/Simulink建模分析
再线性控制器中讲到: 举例说明(线性控制器中的一个例子)博客中有说明 在matlab中:使用lqr求解K1.K2 这里希望角度(即x1)能迅速变化,所以Q矩阵中Q11为100,并没有关心角速度(dot ...
- html5文件上传断点续传
最近公司要做一个html5上传的jquery插件,要在下先实现功能,要求显示上传进度,文件信息,断点续传等等.我一看,艾玛!Σ(゚д゚lll),没做过啊.没办法,(# ゚Д゚),只能去查资料了.作为一 ...
- 正则系列——JavaScript正则表达式入门心得
我发现有个别字符被这个编辑器给刷掉了,但是灰色区域显示正常,以灰色区域代码为准 什么玩意? 在我刚开始学习编程的时候,就听过正则了,也听说正则很牛逼,懂正则的更牛逼.但是苦于没有人指点,也没有使用正则 ...
- React系列——websocket群聊系统在react的实现
前奏 这篇文章仅对不熟悉在react中使用socket.io的人.以及websocket入门者有帮助. 下面这个动态图展示的聊天系统是用react+express+websocket搭建的,很模糊吧, ...