微博搜索爬虫

网页分析

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

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. 手把手教你学vue-4(vuex)

    1.首先明白vuex是做什么用的. 管理统一组件状态state.每个应用将仅仅包含一个 store 实例.单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态 ...

  2. python爬虫---爬取网易云音乐

    代码: import requests from lxml import etree text = requests.get("https://music.163.com/discover/ ...

  3. ubantu系统之jdk切换使用

    安装 jdk7: $ sudo apt-get update $ sudo apt-get install openjdk-7-jdk 安装 jdk1.8:sudo add-apt-repositor ...

  4. 解决vue-cli项目在运行时控制台出现 [WDS] Disconnected! 错误

    在项目运行时 控制台输入 npm run dev 后浏览器出现该项目页面,但是出现了[WDS] Disconnected!错误 虽然有时并不影响,但是作为一名合格的程序员 我们还是尽量将其修复,以免将 ...

  5. vue单文件组件形成父子(子父)组件之间通信(vue父组件传递数据给子组件,子组件传递数据给父组件)

    看了很多文章,官网文档也有看,对父子组件通信说的不是很明白:决定自己总结一下: vue一般都使用构建工具构建项目:这样每个组件都是单文件组件:而网上很多文章都是script标签方式映入vue,组件通信 ...

  6. Linux操作系统与项目部署

    Linux操作系统与项目部署 注意:本版块会涉及到操作系统相关知识. 现在,几乎所有智能设备都有一个自己的操作系统,比如我们的家用个人电脑,基本都是预装Windows操作系统,我们的手机也有Andro ...

  7. 还原lvm逻辑卷创建整个过程

    很多情况入职的时候,系统可能已规划过的,但是有的信息也不是很完整,比如下面的lvm逻辑卷我们先不管对与错,利用一些工具来了解当前lvm逻辑卷的情况 系统采样: [root@fp-web-112 var ...

  8. GRPC-go版本

    GRPC-go版本 1.安装GO,protobuf 只适合有梯子的 GO的安装没必要说了 protobuf :https://github.com/protocolbuffers/protobuf/r ...

  9. 新手小白入门C语言第六章:C运算符

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 小编将会为大家逐一介 ...

  10. SpringMVC初学习

    # SpringMVC快速入门 @[TOC](文章目录) --- # 前言 `提示:这里可以添加本文要记录的大概内容:` 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习 ...