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页.......哈哈,好吧.挺无奈的 ...
随机推荐
- MySQL&SQL server&Oracle&Access&PostgreSQL数据库sql注入详解
判断数据库的类型 当我们通过一些测试,发现存在SQL注入之后,首先要做的就是判断数据库的类型. 常用的数据库有MySQL.Access.SQLServer.Oracle.PostgreSQL.虽然绝大 ...
- Windows 7/8 64位系统 不能注册32位dll 文件的解决方案
这几天碰到一个问题,运行一个易语言开发的软件出现以下错误.我的系统是 Windows7 64 位 专业版.在系统盘 windows/system32 下查找 dm.dll.但是没有这个文件.于是我到 ...
- matplotlib字体
matplotlib官方文档 https://matplotlib.org/stable/gallery/index.html 使用以下代码查看 import matplotlib.pyplot as ...
- HTTP发展史,HTTP1.1与HTTP2.0的区别
前言 我们知道HTTP是浏览器中最重要且使用最多的协议,它不仅是浏览器与服务端的通信语言,更是互联网的基石.随着浏览器的不断更新迭代,HTTP为了适应技术的更新也在不断进化,学习HTTP的最佳途径就是 ...
- eclipse启动指定jvm的版本
参阅:https://www.eclipse.org/forums/index.php/t/1105435/ https://wiki.eclipse.org/Eclipse.ini#-vm_valu ...
- 详解 IOC
什么是IOC: IOC-Inversion Of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是 ...
- 学习git(一)
一.自动化运维 1.网络层(接入层.汇聚层.核心层): 1 LB+HA(L4.L7): 2 服务层(reverse proxy cache.应用层.web层.SOA层.分布式层.DAL): 3 数据层 ...
- webpack+vue-cli+ElementUI+vue-resource 前端开发
线上商城项目(电脑0环境)1.安装node.js (参考http://www.runoob.com/nodejs/nodejs-install-setup.html): 2.安装 webpack (全 ...
- hive启动出错
Hive启动报错:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument - 狗子的进阶史 - ...
- 安卓性能优化之计算apk启动时间
之前有人在知乎提问:"怎么计算apk的启动时间?" : 利用Python或者直接用adb命令怎么计算apk的启动时间呢?就是计算从点击图标到apk完全启动所花费的时间.比如,对游戏 ...