python爬虫学习之路(7) 爬取糗事百科

python如何爬取糗事百科 所需要引入的库,python版本号不同,加入#coding=gbk,避免正文中出现中文时报错。 爬取的内容,跟路径在开发者模式中选择 包裹的内容。 现在我们想获取发布人,发布日期,段子内容,以及点赞的个数。不过另外注意的是,段子有些是带图片的,如果我们想在控制台显示图片是不现实的,所以我们直接把带有图片的段子给它剔除掉,只保存仅含文本的段子。 所以我们加入如下正则表达式来匹配一下,用到的方法是 re.findall 是找寻所有匹配的内容。方法的用法详情可以看前面说的正则表达式的介绍。 ... 阅读详情

糗事百科是不需要登录的,所以也没必要用到Cookie,另外,也不需要传数据到后台,所以也不用data.
好,现在我们尝试抓取一下糗事百科的热门段子吧.
我们需要爬取每个段子的发布者,内容和点赞数
1.确定URL并抓取页面代码
首先我们确定好页面的URL是 http://www.qiushibaike.com/hot/page/1
我们先来尝试获取一下糗事百科的网页,看能不能成功获取.

from urllib import request
import re

if __name__ == '__main__':
    # 糗事百科的网址
    url = "https://www.qiushibaike.com/hot/page/1/"
    # headers
    headers={}
    headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
    req = request.Request(url, headers=headers)
    response = request.urlopen(req)
    # 获取html代码
    html = response.read().decode("utf-8")
    print(html)

从获取结果来看,可以看出我们已经成功获取了糗事百科热门页面的html代码了.
这里写图片描述

2, 分析页面html代码
打开网页的调试模式,看看我们所需要的数据是在哪些div里.
这里写图片描述
打开里面的一个div可以分析出每一个段子都是div class=”article block untagged mb15″ id=”…”>…/div>”包裹的内容,接下来再分析我们所要获取的发布人,内容和点赞数在哪个标签里:
这里写图片描述
我们可以看见发布人是在h2标签里的.
这里写图片描述
我们可以看见内容是在span标签里的.
这里写图片描述
我们可以看见点赞数是在i标签里的.

3, 根据我们要获取的信息构造正则表达式
在了解了网页的html标签后,现在来构造一个正则表达式来获取我们所需要的信息
正则表达式如下:

<div.*?author.*?<a.*?<h2>(.*?)</h2>.*?<div.*?<span>(.*?)</span>.*?<div.*?<span.*?<i.*?>(.*?)</i>

现在正则表达式在这里稍作说明

1).? 是一个固定的搭配,.和代表可以匹配任意无限多个字符,加上?表示使用非贪婪模式进行匹配,也就是我们会尽可能短地做匹配,在这里我们用了省略一些不必要的标签,免得正则表达式太长。

2)(.?)代表一个分组,在这个正则表达式中我们匹配了3分组,每一个分组的内容就是我们所需要的信息,在后面的遍历item中,item[0]就代表第一个(.?)所指代的内容,item[1]就代表第二个(.*?)所指代的内容,以此类推。

3)re.S 标志代表在匹配时为点任意匹配模式,点 . 也可以代表换行符。
这样我们就获取了发布人,发布时间,发布内容以及点赞数。

4, 利用正则表达式获取我们所需要的信息

from urllib import request
import re

if __name__ == '__main__':
    # 糗事百科的网址
    url = "https://www.qiushibaike.com/hot/page/1/"
    # headers
    headers={}
    headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
    req = request.Request(url, headers=headers)
    response = request.urlopen(req)
    # 获取html代码
    html = response.read().decode("utf-8")
    构造正则表达式
    zheng = "<div.*?author.*?<a.*?<h2>(.*?)</h2>.*?<div.*?<span>(.*?)</span>.*?<div.*?<span.*?<i.*?>(.*?)</i>"
    pattern = re.compile(zheng, re.S)
    items = re.findall(pattern, html)
    for item in items:
        print(item[0], " ", item[1], " ", item[2])

得到的结果如下:
这里写图片描述
从结果来看,我们已经获取到了我们所需要的信息了.

5 ,完善一下界面和功能

from urllib import request
import re

class QSBK:
    # 初始化变量
    def __init__(self):
        # 糗事百科的网址
        self.url = "https://www.qiushibaike.com/hot/page/{}/"
        # headers
        self.headers = {}
        self.headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
        # 读取第几页内容
        self.pagenum = 1

    # 构造每一次读取页面的url地址
    def set_url(self):
        # 把页面值传到地址里
        url = self.url.format(self.pagenum)
        # 页面值加一
        self.pagenum += 1
        return url

    # 读取网页内容,获取其html代码
    def get_html(self):
        # 设置url
        url = self.set_url()
        req = request.Request(url=url, headers=self.headers)
        # 获取网页内容
        response = request.urlopen(req)
        # 对网页内容进行解码
        html = response.read().decode("utf-8")
        return html

    # 获取网页html并用正则表达式获取我们需要的内容
    def getPage(self):
        html = self.get_html()
        # 构造正则表达式
        zheng = "<div.*?author.*?<a.*?<h2>(.*?)</h2>.*?<div.*?<span>\s*(.*?)\s*</span>.*?<div.*?<span.*?<i.*?>(.*?)</i>"
        pattern = re.compile(zheng, re.S)
        items = re.findall(pattern, html)
        return items

    # 输出我们需要的内容
    def prin(self):
        items = self.getPage()
        for item in items:
            print("发布人:", item[0], "\n内容:\n ", item[1].replace("<br/>", ""), "\n点赞数:\n", item[2])
            print("-"*30)

    # 控制输出
    def con(self):
        while True:
            # 输出内容
            self.prin()
            print("按回车查看新段子,Q退出")
            # 等待用户输入
            userIn = input()
            # 如果输入Q则程序结束
            if input == "Q":
                print("退出糗事百科")
                return


if __name__ == '__main__':
    qs = QSBK()
    qs.con()

效果图如下:
这里写图片描述

Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例 爬虫的全称为网络爬虫,简称爬虫,别名有网络机器人,网络蜘蛛等等。网络爬虫是一种自动获取网页内容的程序,为搜索引擎提供了重要的数据支撑。搜索引擎通过网络爬虫技术,将互联网中丰富的网页信息保存到本地,形成镜像备份。我们熟悉的谷歌、百度本质上也可理解为一种爬虫。如果形象地理解,爬虫就如同一只机器蜘蛛,它的基本操作就是模拟人的行为去各个网站抓取数据或返回数据。 阅读详情

相关推荐

Python网络爬虫与聚焦爬虫,如何用爬虫爬取段子

一、网络爬虫Python爬虫开发工程师,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一...

月吖吖 2076

爬虫爬取糗事百科段子

目录糗事百科段子爬取爬虫功能介绍所需软件网页解析找到所需信息所在代码段获取信息编程思路分析获取当前所有段子对提取的内容进行优化数据合并查看点赞数最多的内容总结最后附代码 糗事百科段子爬取 感谢阅读最爱小鱼果的博客。 本篇博客在于记录本人学习爬虫过程中的一些项目案例,如有错误还请大家批评指正! 爬虫功能介绍 可获取糗事百科段子里当前所有用户ID,段子内容,点赞数。 注:因段子内容为随机,每次打开都会刷新内容,故每个人所看到的段子内容不一定相同 所需软件 1、浏览器(最好为Google Chrome) 2、

weixin_44586452的博客 962

python爬虫小项目:爬取糗事百科段子

python爬虫一直是我想要入手的方向,通过对静觅崔庆才的个人博客的学习,完成了一些小项目。在此对其及其博客表示感谢,也推荐大家学习。 本文完成的是抓取糗事百科热门段子中python爬虫代码的python 3.x版本,希望给学习过相同博文且想用python3.x完成的人带来一点启发。 具体步骤请参照抓取糗事百科热门段子,本文仅是成品。本文的正则表达式目前可用。 该项目中用到的pyth

funwj的博客 2789

网络爬虫---爬取糗事百科段子实战

Python网络爬虫 1.知识要求 掌握python基础语法 熟悉urllib模块知识 会使用浏览器伪装技术 如果您对相关知识遗忘了,可以点上面的相关知识链接,熟悉一下。 2.爬取糗事百科段子实战 (1)首先,我们按照之前爬取csnd首页的信息的方式,去爬取糗事百科段子相关内容,你会发现运行后程序报错,看错误原因, ...

渐渐的忘记,赶不上明天(读研ing,2024年毕业) 2107

用 Python 爬取糗事百科

爬取前的准备 糗事百科官网:https://www.qiushibaike.com 段子网址:https://www.qiushibaike.com/text 关于解析html博主选择的方法是使用xpath,如有不懂的同学,可看下面两个表格。如果想要深入学习xpath的相关知识可点击博主给的官方文档的链接进行学习,博主在此声明是为了让读者们能够理解解析式的具体含义。 官网网址:https://lxml.de/tutorial.html 路径表达式 匹配属性 1.1 查看网页 ...

1391

python爬虫爬取糗事百科内容

糗事百科的爬虫,是主要用来介绍爬虫的一些基本知识,方便大家爬取简单的糗事百科的内容,利用的是beautifulsoup

Python爬虫框架Scrapy之爬取糗事百科大量段子数据

如上篇文章《Python爬虫框架之Scrapy详解》(传送门:Python爬虫框架之Scrapy详解)所述。首先,准备scrapy环境: 安装Python,pip,使用pip安装lxml和scrapy。 scrapy startproject qiubai新建一个名为qiubai的scrapy爬虫项目。 新建qiubai爬虫项目使用PyCharm打开,项目结构如图:定义QiubaiItem:新建项目

绕行的专栏 6339

仿糗事百科微信小程序

仿糗事百科微信小程序 1. 实现顶部页签菜单左右滑动效果 2. 实现顶部页签菜单切换效果,页签菜单选中时字体加粗,同时对应的内容也跟着变化 3. 实现专享界面糗事列表设计,包括发布人头像、发布人昵称、发布的段子等信息,以列表的显示展现出来。 4. 实现视频列表页设计,视频可以进行播放与暂停; 5. 实现分享功能,可以将当前界面分享给好友 6.设计概要:数据绑定、列表渲染、请求服务器数据, (1)实现顶部页签滑动效果,需要借助于scroll-view可滚动视图区域组件,设置scroll-x="true"属性,允许在水平方向上左右滑动 (2)页签菜单切换和内容也跟着进行切换,需要使用swiper滑块视图容器组件,根据current当前页面索引值来决定显示那个面板 (3)设计糗事列表,先设计一条内容,然后可以复制这条内容的布局,在这个基础上进行修改 (4)设计视频列表,需要使用video视频组件,每个视频组件都有唯一的id;设计幻灯片轮播效果,准备好幻灯片需要轮播的图片 (5)分享功能,需要在在 Page 中定义 onShareAppMessage 函数,设置该页面的分享信息 (6)在界面布局的时候,会用到微信小程序的组件,包括view视图容器组件、image图片组件、swiper滑块视图容器组件、scroll-view可滚动视图区域组件、video视频组件等组件的使用 (7) 界面样式设计,需要写一些wxss样式进行界面的美化和渲染 (8)页签菜单切换的时候,需要获得该页签所对应的id,需要绑定菜单切换事件 (9)页面分享,需要使用onShareAppMessage这个API接口,进行界面分享 (10)动态获取糗事列表信息,需要使用wx.request请求获得糗事列表信息

[Python]网络爬虫(八):糗事百科的网络爬虫(v0.3)源码及解析(简化更新)

项目内容: 用Python写的糗事百科的网络爬虫。 使用方法: 新建一个Bug.py文件,然后将代码复制到里面后,双击运行。 程序功能: 在命令提示行中浏览糗事百科。 原理解释: 首先,先浏览一下糗事百科的主页:http://www.qiushibaike.com/hot/page/1 可以看出来,链接中page/后面的数字就是对应的页码,记住这一点为以后的编写做准备。 然后

汪海的实验室 9万+

广工计组实验f2一位全加器

一位全加器实验

weixin_63692154的博客 2847

ROS 2 Jazzy与Gazebo Harmonic仿真实战:从零搭建机器人仿真环境与高级应用

本文详细介绍了如何使用ROS 2 Jazzy和Gazebo Harmonic从零搭建机器人仿真环境,涵盖环境配置、传感器集成、多机器人协同和GPU加速优化等高级应用。通过实战案例和性能调优技巧,帮助开发者高效构建可靠的机器人仿真系统,提升开发效率。

h9j8k7l6m5n的博客 1220

网络爬虫——项目实战(爬取糗事百科所有文章)

项目分析 一、首先准备好我们要爬取网站的糗事百科网址(http://www.qiushibaike.com/),大家可以查看一下文章的源代码,查找我们要爬取的内容的规律,下面是我提取的部分代码 <div class="content"> <span> 儿子三岁的时候,经常跟着奶奶,奶奶开了个养鸡场,养了三四千只鸡,孩子每天最高兴的就是跟奶奶进鸡房捡鸡蛋,拾进那个大木头箱子,...

程序员小哲的博客 1万+

SAP开发顾问简历模板范文(精选篇)

SAP开发顾问简历该怎么写呢?

Huanzhucv的博客 1570

在Python中使用BeautifulSoup进行网页爬取,糗事百科

目录什么是网页抓取?为什么我们要从互联网上抓取数据?网站采集合法吗?HTTP请求/响应模型创建网络爬虫步骤1:浏览并检查网站/网页步骤2:创建用户代理步骤3:导入请求库检查状态码步骤4:使用 BeautifulSoup 库解析HTML步骤5:使用for循环请求多个页面步骤6:使用 select() 方法,快速找到标签元素步骤7:数据清洗,删除字符串“None”最终的解决方案输出:最后 简介:Web抓取是从Internet提取数据的过程。这也称为网络收集或网络数据提取。Python使我们能够使用自动化技术执行

一个火星程序员的专栏 2584

AutoLISP 学习 (一)

AutoLISP基本语法结构、语法 以括号组成表达式,左右括号一定要成对,单、双引号也要成对,例如: (defun c:hello() (princ "\nHello world!") (prin1) ) 表达式格式:(函数名 操作数 操作数 …),例如: (setq p1 (list 0 0)) (setq p2 (list 10 10)) (setq p3 (list 20 20)) ;;; CAD中画直线,经过p1 p2 p3 (command "LINE" p1 p2 p3 ""

m0_54575622的博客 2123

华为OD机试双机位C卷-魔法收积木 (C/C++/Py/Java/Js/Go)

华为OD机试(机考)双机位C卷 【魔法收积木】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为od - 魔法收积木。

qq_45776114的博客 1941

Python爬虫实战之爬取糗事百科段子

首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来。 友情提示 糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的情况,是因为正则表达式没有匹配到的缘故。 现在,博主已经对程序进行了重新修改,代码亲测可用,包括截图和说明,之前一直在忙所以没有及时更新,望大家海涵! 糗事百科又又又又改版了,博主已经没...

华为云官方博客 2008

基于 YOLOv26 的食品包装缺陷检测系统:智能视觉质检方案

本文提出了一种基于YOLOv26深度学习的食品包装缺陷智能检测系统。该系统能够自动识别多种常见包装缺陷,包括密封不良、破损、污染、标签错误等8类问题。相比传统人工检测方法,该系统具有高精度、多类别分类、实时推理等优势。文章详细介绍了系统架构,包含数据采集、预处理、YOLOv26检测模型和后处理四个核心模块,并提供了完整的环境配置和数据处理代码实现。该系统为食品包装行业提供了一种高效、准确的智能视觉质检解决方案。

一键难忘的博客 691

python爬虫(6)爬取糗事百科

亲测有效,不管是windows 还是linux都能运行

Jimy_Fengqi 1万+

基于Python实现人脸识别相似度对比

随着人工智能技术的不断进步,人脸识别成为了一种广泛应用的技术。人脸相似度对比是其中的一个重要应用场景,可以用于人脸搜索、身份验证等方面。本文将介绍如何使用Python实现人脸相似度对比。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 9810

MATLAB基础应用精讲-【强化学习】Actor - Critic 算法(附python代码实现)

这种架构结合了策略梯度方法(Policy - Gradient Methods)和价值函数估计方法(Value Function Estimation Methods)的优点。在强化学习中,智能体(Agent)需要通过与环境(Environment)的交互来学习最优的行为策略,以获得最大的累积奖励(Cumulative Reward)。

qq_36130719的博客 366

基于Python语言的小型网络爬虫

目录一、概念介绍二、设计思路三、详细设计内容四、效果演示及代码 一、概念介绍 1、网络爬虫:又称为网络蜘蛛或网络机器人,网络爬虫本质上是一段计算机程序或脚本,其按照一定的逻辑和算法规则自动地抓取和下载万维网的网页,是搜索引擎的一个重要组成部分。网络爬虫通过统一资源定位符URL来查找目标网页,将用户所关注的数据内容直接返回给用户,并不需要用户以浏览网页的形式去获取信息,为用户节省了时间和精力,并提高了数据采集的准确度,使用户在海量数据中游刃有余。网络爬虫的最终目的就是从网页中获取自己所需的信息。 2、网络爬虫

weixin_45148589的博客 913

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python爬虫实战之翻页爬取糗事百科段子

近期在翻看视频学习爬虫,把每天学习的内容记录下~如有一起学习的爬友就更好了。 爬虫实战之糗事百科段子简单基础1、正则表达式2、信息筛选工具urllib基础实战 简单基础 1、正则表达式 用途:用于信息筛选提取 1、全局匹配函数使用格式: re.compole(‘正则表达式’).findall(‘源字符串’) 普通字符abc 正常匹配-abc 原子 \w 匹配字母、数字、下划线 原子 \W 匹配除

weixin_45498566的博客 1010

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Python7个热门爬虫小案例(附源码)

本文介绍了7个Python爬虫小案例,包括爬取豆瓣电影Top250、猫眼电影Top100、全国高校名单、中国天气网、当当网图书、糗事百科段子和新浪微博信息,帮助读者理解并实践Python爬虫基础知识。

m0_75067840的博客 2026

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

python爬虫爬取糗事百科

最近研究python爬虫,按照网上资料实现了python爬虫爬取糗事百科,做个笔记。 分享几个学习python爬虫资料: 廖雪峰python教程 主要讲解python的基础编程知识 python开发简单爬虫 通过一个实例讲解python爬虫的整体结构 python正则表达式 讲解爬虫中匹配中所需要的正则表达式 python爬虫系列教程 几个训练的实例 简单爬虫的架构 爬虫的运

what_lei的博客 6072

Python多线程爬虫实战_爬取糗事百科段子的实例

下面小编就为大家分享一篇Python多线程爬虫实战_爬取糗事百科段子的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 多线程爬虫:即程序中的某些程序段并行执行, 合理地设置多线程,可以让爬虫效率更高 糗事百科段子普通爬虫和多线程爬虫 分析该网址链接得出: https://www.qiushibaike.com/8hr/page/页码/ 多线程爬虫也就和JAVA的多线程差不多,...

python基础编程开发教程 1325
上一篇: python爬虫学习之路(6) cookie
下一篇: python爬虫学习之路(8) requests
QEcode
博客等级 码龄10年 39粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值