微博搜索爬虫

网页分析

由于网页端反爬虫机制比较完善所以才去移动端进行爬虫。

url地址:https://m.weibo.cn/

搜索框,输入关键词进行搜索

对网页进行抓包,找到相关数据

查看数据是否与网页的内容相同

分析多组数据的请求头

编写程序

构造url地址

通过网页分析构造url地址对,地址信息访问。

import requests

#构造搜索内容
data = {
'containerid':'100103type=1&q=电影',
'page_type':'searchall',
'page':'1',
} #反爬虫,模拟游览器访问
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',} url = "https://m.weibo.cn/api/container/getIndex?"
#通过GET方式访问该网站
html = requests.get(url,headers=headers,params=data)
#打印结果,如果返回200,则访问成功
print(html)

获取相关数据

通过对网页分析,该网页获取的数据为json格式的数据

import json
......
#对返回结果判断,如果是200,则把数据转为json格式
if html.content:
response = html.json()

数据为字典类型

import re
.......
#提取数据
cards = response["data"]["cards"]
result = []
#遍历cards列表
for card in cards:
#判断"mblog"键是否存在该字典中
mblogs = "mblog"
if mblogs in card:
#提取正文内容
text = card[mblogs]["text"]
#对正文进行提取,利用正则表达式删除HTML标签
#re.compile正则表达式的字符串创建模式对象,re.S使.匹配包括换行在内的所有字符
dr = re.compile(r'<[^>]+>',re.S)
#把数据以字典的形式保存在列表中
result.append({
'发布时间':card[mblogs]["created_at"],
'用户id':card[mblogs]["user"]["id"],
'用户名':card[mblogs]["user"]["screen_name"],
'微博地址':card[mblogs]["user"]["profile_url"],
'转发数':card[mblogs]["reposts_count"],
'评论数':card[mblogs]["comments_count"],
'点赞数':card[mblogs]["attitudes_count"],
'正文':dr.sub('',text)})
print(result)

查看结果

获取到的数据保存到.cvs文件中

import csv
import time
from csv import DictWriter
......
#保存文件
#文件的名字
file_name = '电影.csv'
header = ['发布时间','用户id','用户名','微博地址','转发数','评论数','点赞数','正文']
with open(file_name,'a',newline = "",encoding = 'gb18030') as f:
f_csv = DictWriter(f,header) #DictWriter以字典形式写入
#防止header重复写入
with open(file_name, 'r', encoding='gb18030', newline="") as file:
reader = csv.reader(file)
if not [row for row in reader]:
f_csv.writeheader()
f_csv.writerows(result)
else:
f_csv.writerows(result)
#延时,防止反爬机制
time.sleep(0.1)

查看是否生成 “电影.csv” 文件

完成程序编写。

对源代码进行改进

目前只是爬取一页的结果,以及每次搜索不同的关键词都要改源代码内容。

为了让该程序实用美观,引用tkinter建立GUI界面。

from tkinter import *	#tkinter可以快速创建GUI应用程序
from csv import DictWriter
......
#创建一个窗口
root = Tk() #设计窗口大小以及位置 宽高400*100 位置(650,400)
root.geometry('405x80+650+400') #设计窗口标题
root.title('微博搜索') #标签控件
labl1 = Label(root,text = '关键词:',font = ('华文行楷',18))
#网格显示标签,靠左显示
labl1.grid(sticky=W) #输入框
entry = Entry(root,font = ('华文行楷',18))
#网格显示标签
entry.grid(row=0,column=1,sticky=W) #搜索按钮
button = Button(root,text = '搜索',font = ('华文行楷',15),command=sign)
#command=sign对程序进行对接
#网格式显示
button.grid(row=0,column=3,sticky=E) #显示窗口
root.mainloop()

对程序改进

def sign():
#获取输入结果
key_word = entry.get()
#去除输入框的空格
key_word = key_word.strip()
#判断输入是否为空
if key_word == '':
#提示信息
messagebox.showinfo(title = '提示',message = '请输入关键词') #构造搜索内容
else:
for i in range(1,20):
data = {
'containerid':'100103type=1&q{}'.format(key_word),
'page_type':'searchall',
'page':i,
}
...... #文件的名字
file_name = key_word + '.csv' ......
#显示生成文件
#标签控件
labl2 = Label(root,text = '查询完成:{}'.format(file_name),font = ('华文行楷',15))
#网格显示标签,靠左显示
labl2.grid(row=1,column=1)

Python 微博搜索爬虫的更多相关文章

  1. 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)

    Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇) 淘宝改字段,Bugfix,查看https://github.com/hunterhug/taobaoscrapy.git 由于Gith ...

  2. 初探爬虫 ——《python 3 网络爬虫开发实践》读书笔记

    零.背景 之前在 node.js 下写过一些爬虫,去做自己的私人网站和工具,但一直没有稍微深入的了解,借着此次公司的新项目,体系的学习下. 本文内容主要侧重介绍爬虫的概念.玩法.策略.不同工具的列举和 ...

  3. Python 开发轻量级爬虫07

    Python 开发轻量级爬虫 (imooc总结07--网页解析器BeautifulSoup) BeautifulSoup下载和安装 使用pip install 安装:在命令行cmd之后输入,pip i ...

  4. Python编写网页爬虫爬取oj上的代码信息

    OJ升级,代码可能会丢失. 所以要事先备份. 一開始傻傻的复制粘贴, 后来实在不能忍, 得益于大潇的启示和聪神的原始代码, 网页爬虫走起! 已经有段时间没看Python, 这次网页爬虫的原始代码是 p ...

  5. python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...

  6. Ruby用百度搜索爬虫

    Ruby用百度搜索爬虫 博主ruby学得断断续续,打算写一个有点用的小程序娱乐一下,打算用ruby通过百度通道爬取网络信息. 第三方库准备 mechanize:比较方便地处理网络请求,类似于Pytho ...

  7. python 3.x 爬虫基础---正则表达式

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...

  8. python 3.x 爬虫基础---Requersts,BeautifulSoup4(bs4)

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...

  9. Python学习网络爬虫--转

    原文地址:https://github.com/lining0806/PythonSpiderNotes Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scra ...

随机推荐

  1. Linux 0.11源码阅读笔记-块设备驱动程序

    块设备驱动程序 块设备驱动程序负责实现对块设备数据的读写功能.内核代码统一使用缓冲块间接和块设备(如磁盘)交换数据,缓冲区数据通过块设备驱动程序和块设备交换数据. 块设备的管理 块设备表 内核通过一张 ...

  2. CCF201409-2 画图

    问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域涂上颜色. 下图给出了一个画了两个矩形的例子.第一个矩形是 ...

  3. Java JDK 动态代理实现和代码分析

    JDK 动态代理 内容 一.动态代理解析 1. 代理模式 2. 为什么要使用动态代理 3. JDK 动态代理简单结构图 4. JDK 动态代理实现步骤 5. JDK 动态代理 API 5.1 java ...

  4. jboss学习1之EJB和JBOSS的宏观理解

    一.中间件(Middleware)         先来看一张图:         中间件,也就是图中的Middleware,他的作用是什么呢?        简单来说,中间件就是操作系统和应用程序之 ...

  5. ubuntu修复找不到sudo命令

    1.首先,您需要安装该sudo命令.你可以使用 apt 包管理器来做到这一点.您需要以有权安装软件包的用户身份运行此命令,例如root: apt-get install sudo 2.下一步是为您自己 ...

  6. Shiro-登陆流程认证-图解

  7. 3种方法改变this的指向

    <body>     <div style="width: 200px;height: 200px;hotpink;"></div>     & ...

  8. 前端架构三大巨头之一Angular | 深度讲解

    云智慧集团成立于2009年,是全栈智能业务运维解决方案服务商.经过多年自主研发,公司形成了从IT运维.电力运维到IoT运维的产业布局,覆盖ITOM.ITOA.ITSM.DevOps以及IoT几大领域, ...

  9. 00. 初次使用(系统安装+ssh连接)

    效率教程,配置不需要插显示器,一步到位 一.装系统 1. sd卡用读卡器插上电脑,打开软件SD Formatter 4.0,按默认配置,直接格式化. 软件下载链接:https://pan.baidu. ...

  10. 技术分享 | SeleniumIDE用例录制

    1.录制回放方式的稳定性和可靠性有限 2.只支持 Firefox.Chrome 3.对于复杂的页面逻辑其处理能力有限 环境准备 Chrome 插件:https://chrome.google.com/ ...