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日

相关文章

  • 《爬虫学习》(五)(爬虫实战之爬取天气信息)

    1.大体框架列出+爬取网页: #数据可视化 from pyecharts import Bar #用来url连接登陆等功能 import requests #解析数据 from bs4 import BeautifulSoup #用来存取爬取到的数据 data = [] def parse_data(url): headers = { ‘User-Agent…

    爬虫 2023年4月10日
    00
  • python 列表元素左右循环移动 的多种解决方案

    在Python中,我们可以使用多种方法来实现列表元素的左右循环移动。下面将介绍三种常用的解决方案。 解决方案一:使用切片语法 使用切片法是一种简单而直的方法,可以实现列表元素的左右循环移动。具体实现方法是:将列表的后k个元素切片出来,后将其与列表的前n-k个元素拼接起来,得到一个新的列表。 下面是一个示例,演示了如何使用片语法实现列表元素的左右循环移动: #…

    python 2023年5月13日
    00
  • python数据预处理之将类别数据转换为数值的方法

    首先,对于将类别数据转换为数值数据,一般有两种方法:标签编码(Label Encoding)和独热编码(One-Hot Encoding)。下面分别介绍这两种方法的具体步骤及应用。 标签编码(Label Encoding) 1. 库的导入 from sklearn.preprocessing import LabelEncoder 2. 创建LabelEnc…

    python 2023年5月31日
    00
  • JS在IE和FF下attachEvent,addEventListener学习笔记

    下面是关于“JS在IE和FF下attachEvent,addEventListener学习笔记”的完整攻略: 什么是attachEvent、addEventListener? attachEvent和addEventListener都是JavaScript中绑定事件的方法。 attachEvent是IE浏览器下的方法,用于绑定事件。 addEventList…

    python 2023年6月13日
    00
  • Python实现字典的key和values的交换

    要交换Python字典中的key和values,可以采用以下步骤: 首先,创建一个字典。 把字典里的key和values交换位置,可以采用字典推导式的方式。具体来讲,可以创建一个新的字典,遍历原始字典,把原始字典的key和value倒置,最后把倒置后的key-value键值对添加到新的字典中。 删除原始字典。 以下是Python代码实现交换字典中key和va…

    python 2023年5月13日
    00
  • python sqlobject(mysql)中文乱码解决方法

    Python sqlobject(mysql)中文乱码解决方法 在使用Python的sqlobject库连接MySQL数据库时,有时会出现中文乱码的问题。本文将为您提供一个完整攻略,详细讲解如何解决这问题,并提供两个示例说明。 1. 中文乱码问题的原因 在使用sqlobject库连接MySQL数据库时,中文乱问题通常是由于编码不一致导致的。MySQL默认使用…

    python 2023年5月14日
    00
  • python中实现迭代器(iterator)的方法示例

    下面是 “Python中实现迭代器(iterator)的方法示例” 的完整攻略: 什么是迭代器(iterator) 在Python中,迭代器(iterator)是一种确保我们可以按照特定顺序访问集合中每个元素的对象。它是用来迭代或遍历可迭代对象的工具,如列表、元组、字典等。迭代器对象可以使用 next() 方法来逐个返回集合中的数据项,当所有元素都已访问完毕…

    python 2023年5月14日
    00
  • Python爬虫制作翻译程序的示例代码

    以下是“Python爬虫制作翻译程序的示例代码”的完整攻略。 1.爬虫程序部分 首先我们需要写一个爬虫程序,用来获取需要翻译的文本。这里我们使用Python的requests和BeautifulSoup库来实现。 import requests from bs4 import BeautifulSoup def get_text(url): # 发送网络请求…

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