微博搜索爬虫

网页分析

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

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. C#委托、多播委托极简案例,一看就懂

    废话不多讲,直接上代码,看完代码再讲解: class Class1 { public delegate void Del();//声明委托 public static void F1() { Cons ...

  2. 如何实现多个接口Implementing Multiple Interface

    4.实现多个接口Implementing Multiple Interface 接口的优势:马克-to-win:类可以实现多个接口.与之相反,类只能继承一个超类(抽象类或其他类). A class c ...

  3. nodejs教程---基于expressJs框架,实现文件上传(upload)?

    文件上传功能在nodejs初期是一件很难实现的功能,之后出现了formidable勉强能解决这个问题,但是express框架出现之后基于这个框架开发的中间件有更好的方法来处理文件上传,这个中间件就是m ...

  4. script标签中defer和async的区别(稀土掘金学习)

    如果没有defer或async属性,浏览器会立即加载并执行相应的脚本.它不会等待后续加载的文档元素,读取到就会开始加载和执行,这样就阻塞了后续文档的加载. 下图可以直观的看出三者之间的区别: 其中蓝色 ...

  5. eclipse 执行main方法 错误: 找不到或无法加载主类

    检查环境变量是否正确 JAVA_HOME JAVA的实际安装目录 CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\ ...

  6. linux原生命令行看上面的内容

    上一页:Shift+pageUp 下一页:Shift+pageDown

  7. 『忘了再学』Shell基础 — 9、Bash中的特殊符号(一)

    目录 1.双单引号 2.双引号 3.$符号 4.反引号 5.$()符号 6.#符号 7.\符号 1.双单引号 '':单引号.在单引号中所有的特殊符号,如$和"`"(反引号)都没有特 ...

  8. Java学习day16

    IO流即输入/输出流,按数据类型分为:字节流和字符流 与IO有关的操作最后都要释放,使用close方法 以字节流形式写入数据后需要换行可以添加换行符,注意旧版系统之间识别的换行符不相同,旧版Windo ...

  9. Codeforces Round #704 (Div. 2), problem: (C) Maximum width还是要多学习

    Problem - C - Codeforces 看清题目要求, 最重要部分在第二段. 大佬最后给出的代码果然简单, 思路简单化, 未必非要把答案在一个大括号里全部完成, 两个指针同时跑,中间加了一堆 ...

  10. 1903021116—吉琛—Java第六周作业—类的定义

    项目 内容 课程班级博客链接 19信计班 这个作业要求链接 第六周作业链接 java面向对象的概念和定义 博客名称 学号-姓名-Java第六周作业-题目自拟 要求 每道题要有题目,代码(使用插入代码, ...