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

下面是“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 通过正则表达式快速获取电影的下载地址

    请跟我一起来详细讲解“Python 通过正则表达式快速获取电影的下载地址”的完整攻略。 1. 引言 电影资源的获取一直是网民关注的重点,有大量的电影资源网站提供了全面的电影下载,但是这些网站大部分不提供下载链接,面对这个问题,我们可以通过利用 Python 编程语言中的正则表达式来快速获取电影的下载地址。 2. 需要的工具 我们在这个过程中需要以下工具: P…

    python 2023年6月3日
    00
  • 完美解决Python 2.7不能正常使用pip install的问题

    针对Python2.7不能正常使用pipinstall的问题,可以通过以下两种方式进行完美解决: 方式一:更新pip版本 升级pip 在终端输入以下命令: python -m pip install –upgrade pip 该命令会升级pip的版本,在升级完成后可以通过以下命令检查pip版本: pip -V 输出的结果应该显示pip的版本号。 安装pip…

    python 2023年5月14日
    00
  • python爬虫 – js逆向之取巧秒解webpack打包的加密参数

    前言 今天的分析对象是这个:aHR0cHM6Ly9tLmN{防查找,去掉我,包括大括号}0eXVuLmNuL3dhc{防查找,去掉我,包括大括号}C9tYWluL2F1dGgv{防查找,去掉我,包括大括号}bG9naW4=       就是去搞这个登录接口的加密参数         就这三个参数     第一个不用说,就是个时间戳   第二个comParam…

    爬虫 2023年4月13日
    00
  • Python第三方库安装教程、什么是第三方库

    Python有一个全球社区:https://pypi.org/,在这里我们可以搜索任何主题的Python第三方库。PyPI全称是Python Package Index,指的是Python包的索引,它由PSF(Python Software Foundation)来维护,并且展示全球Python计算生态。 我们需要学会利用PyPI的主站检索,找到我们使用和关…

    python 2023年5月8日
    00
  • 简单的Python人脸识别系统

    简单的Python人脸识别系统 概述 Python人脸识别系统一般由以下几个模块构成: 摄像头模块:通过电脑或者外接摄像头采集照片或者视频 人脸检测模块:使用人脸检测算法从采集的照片或者视频中提取人脸图像 人脸特征提取与比对模块:对于每个人,在系统中维护一个特征向量用于表示一个人的特征,新采集到的人脸图像与系统中维护的人脸特征向量进行比对,判断是否为同一人 …

    python 2023年5月18日
    00
  • python – 如何通过考虑规则来使python中的日期升序? [复制]

    【问题标题】:How to make Ascending order of dates in python by considering rules? [duplicate]python – 如何通过考虑规则来使python中的日期升序? [复制] 【发布时间】:2023-04-03 10:23:01 【问题描述】: 我有一个数据集,例如不同的 NIC 和日…

    Python开发 2023年4月8日
    00
  • 详解Python高阶函数

    详解Python高阶函数攻略 什么是高阶函数 高阶函数是指可以接受其他函数作为参数或返回一个函数作为结果的函数。在Python中,函数可以被视为数据类型,也就是说,函数可以作为另一个函数的参数进行传递或作为另一个函数的返回值进行返回。 为什么要使用高阶函数 通过使用高阶函数,我们可以让我们的代码更加简洁、优雅,减少重复的代码,提高代码的可读性和复用性。 高阶…

    python 2023年6月5日
    00
  • Python 获取命令行参数内容及参数个数的实例

    下面是详细的攻略: 1. 获取命令行参数内容及参数个数 在Python中,可以通过sys模块中的argv来获取命令行参数内容及参数个数。 1.1 获取参数个数 下面是一个获取参数个数的示例: import sys print("参数个数为:", len(sys.argv)) 其中,sys.argv返回的是一个列表,包含了所有的命令行参数,…

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