python正则爬取某段子网站前20页段子(request库)过程解析

yizhihongxing

下面是“Python正则爬取某段子网站前20页段子(Request库)过程解析”的详细攻略。

1. 前置知识

在学习本篇攻略之前,你需要掌握一些基本的Python知识和爬虫相关知识:

  • Python基础:掌握Python的常用数据类型、流程控制语句、函数等基本知识;
  • requests库:掌握requests库的基本用法,包括发起请求、设置请求头、获取响应内容等;
  • 正则表达式:掌握正则表达式的基本语法和常用的正则表达式操作符。

2. 实现过程

本文将使用Python的requests库和正则表达式,爬取糗事百科网站的段子,并将结果输出到控制台。

2.1 获取页面内容

import requests

# 请求头信息
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/58.0.3029.110 Safari/537.3'}

# 请求糗事百科的第一页数据
url = 'https://www.qiushibaike.com/text/'
r = requests.get(url, headers=headers)

# 如果请求成功,打印响应内容
if r.status_code == 200:
    print(r.content.decode('utf-8'))

上面的代码使用requests库发起了一个GET请求,请求糗事百科网站的文本段子页面,并通过设置请求头模拟了浏览器访问。如果请求成功,就打印出响应内容。

2.2 使用正则表达式提取段子

import re

# 匹配整条段子的正则表达式
pattern = re.compile('<div class="content">\n<span>(.*?)</span>.*?<div class="stats">\n.*?<i class="number">(\d+)</i>', re.S)

# 匹配所有段子
items = re.findall(pattern, r.content.decode('utf-8'))

# 输出前20条段子的内容和评论数
for index, item in enumerate(items[:20]):
    print('第{}条段子:{}'.format(index + 1, item[0].strip()))
    print('评论数:{}'.format(item[1]))
    print('=' * 50)

上面的代码使用正则表达式匹配整条段子的正则表达式,并使用re.findall方法匹配所有的段子信息。接着,使用for循环输出前20条段子的内容和评论数。

2.3 爬取多页段子

for page in range(1, 21):
    url = 'https://www.qiushibaike.com/text/page/{}'.format(page)
    r = requests.get(url, headers=headers)
    if r.status_code == 200:
        items = re.findall(pattern, r.content.decode('utf-8'))
        for index, item in enumerate(items):
            print('第{}条段子:{}'.format((page - 1) * 20 + index + 1, item[0].strip()))
            print('评论数:{}'.format(item[1]))
            print('=' * 50)

上面的代码使用for循环爬取前20页的段子信息,并在每一页中按照前面的方法提取段子信息并输出。注意,在url中使用format方法将要请求的页码填充进去,这样就可以爬取多页段子了。

3. 示例说明

3.1 示例1-基本爬取

下面的代码示例是用于从网站中爬取文本信息,它的网址是这样的:

"https://www.quotes.toscrape.com/page/{}/"

代码如下:

import requests
from bs4 import BeautifulSoup

for i in range(10):
    url = "https://www.quotes.toscrape.com/page/{}/".format(i)
    res = requests.get(url)
    soup = BeautifulSoup(res.text, "html.parser")
    content = soup.find_all("span", class_="text")
    for j in range(len(content)):
        print("{0}:{1}".format(j+1, content[j].text))

上面的代码使用了requests库和BeautifulSoup库去爬取页面信息,并使用循环,分页爬取多个页面。第一个循环用于控制访问的页面数量,第二个循环用于对页面中的信息进行整理和存储。最后输出结果。

3.2 示例2-高级爬取

下面的代码示例是用于从Bing搜索引擎中爬取相关信息,它的网址是这样的:

"https://cn.bing.com/search?q={}&qs=n&form=QBLH&pq={}"

代码如下:

import requests
from bs4 import BeautifulSoup

def get_data(keyword):
    results = []
    url = 'https://cn.bing.com/search?q={}&qs=n&form=QBLH&pq={}'.format(keyword, keyword)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    }
    html = requests.get(url, headers=headers).text
    soup = BeautifulSoup(html, 'html.parser')
    tags = soup.find_all('li', class_='b_algo')
    for tag in tags:
        title = tag.find('a').text
        link = tag.find('a').get('href', None)
        meta = tag.find('div', class_='b_caption').find('p').text
        result = {'title': title, 'link': link, 'meta': meta}
        results.append(result)
    return results


if __name__ == '__main__':
    keyword = 'Python'
    data = get_data(keyword)
    for index, result in enumerate(data):
        print('{0}. {1}'.format(index + 1, result['title']))
        print('链接:{0}'.format(result['link']))
        print('描述:{0}'.format(result['meta']))
        print('=' * 60)

上面的代码使用了requests库和BeautifulSoup库爬取了Bing搜索引擎的页面,并抽取了搜索结果的标题、链接和描述信息。其中使用了函数封装进行了代码抽取,减少了重复代码的出现,提高了代码的复用性和可读性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python正则爬取某段子网站前20页段子(request库)过程解析 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python-Tkinter Text输入内容在界面显示的实例

    下面是Python-Tkinter Text输入内容在界面显示的实例的完整攻略。 概述 Python-Tkinter是一个Python的GUI工具包,可以用于开发桌面应用程序。其中的Text组件可以用来显示多行文本,并且支持输入文字。本文将介绍如何使用Python-Tkinter中的Text组件,将输入的内容在界面中进行显示。 步骤 第一步:导入必要的模块 …

    python 2023年6月13日
    00
  • python实现人人对战的五子棋游戏

    接下来我会详细讲解如何使用Python实现一个人人对战的五子棋游戏的攻略。 准备工作 在开始编程之前,需要先进行一些准备工作。其中,安装Python是必不可少的,同时还需要安装一些Python库,如numpy、pygame等。此外,在本次项目中还需要安装中文字体,以显示中文内容。具体的步骤如下: 安装Python,请到官网上下载并安装最新版本的Python。…

    python 2023年6月3日
    00
  • Python 列表和字典常踩坑即解决方案

    下面是“Python 列表和字典常踩坑即解决方案”的完整攻略。 Python 列表常踩坑及解决方案 1、修改列表中的元素时出现意外 我们可以通过索引来修改列表中的元素,但是有时候我们修改的并不是当前的元素。例如: colors = [‘red’, ‘green’, ‘blue’] for color in colors: if color == ‘red’:…

    python 2023年5月13日
    00
  • 通过自学python能找到工作吗

    当然可以!以下是自学Python并找到工作的完整攻略: 步骤一:学习Python语言基础 Python是一种易于学习的编程语言,它的语法简单,适合初学者入门。你可以选择自学或通过参加课程等方式学习Python语言基础。 学习资源 官方文档:Python官方文档 教程网站:廖雪峰的Python教程 视频课程:Python入门到精通 步骤二:学习Python的W…

    python 2023年6月6日
    00
  • Python实现克里金插值法的过程详解

    以下是关于“Python实现克里金插值法的过程详解”的完整攻略: 简介 克里金插值法是一种空间插值方法,它可以用于估计未知位置的值。在本教程中,我们将介绍克里金插值法的原理和实现方法,包括半方差函数、克里金方程、插值方法等。 半方差函数 半方差函数是克里金插值法的核心,它用于描述空间变量之间的相关性。半方差函数通常由一个参数和一个模型组成,参数用于调整相关性…

    python 2023年5月14日
    00
  • python 合并多个excel中同名的sheet

    合并多个Excel文件中同名的Sheet可以通过Python的pandas库来实现。具体步骤如下: 安装pandas库 在终端中输入以下命令安装pandas库: pip install pandas 导入pandas库 在Python代码文件中导入pandas库: import pandas as pd 读取Excel文件 使用pandas库的read_ex…

    python 2023年6月5日
    00
  • Python集合set的交集和并集操作方法

    关于Python中集合set的交集和并集操作方法,下面是详细的介绍。 集合set的交并集 Python的集合set是一种无序、不重复的元素集,支持交、并、差、对称差等多种数学运算。其中最基础的就是交集和并集,下面分别进行介绍: 交集操作 交集操作用符号&来表示,返回两个集合中共有的元素集合。例如: set1 = set([1, 2, 3, 4]) s…

    python 2023年5月13日
    00
  • 介绍Python中的__future__模块

    让我来为你详细讲解 Python 中的 __future__ 模块。 介绍 __future__ 模块 __future__ 模块是 Python 中用于向前兼容的工具模块,将新版本中引入的语法和特性引入到旧版本中,方便用户适应新特性。该模块包含了一个列表,其中记录了所有新版本中将会引入的特性的名称。 可以通过在 Python 源代码的文件开头添加以下语句来…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部